sgcWebSockets 4.4.8 から、サーバーコンポーネントで JWT トークンがサポートされます。
TsgcHTTP_JWT_Server コンポーネントは、WebSocket プロトコル使用時には WebSocket ハンドシェイク で受信した JWT トークンを、HTTP プロトコル使用時には HTTP ヘッダー として受信した JWT トークンを デコード および 検証 できます。
設定
コンポーネントの JWTOptions プロパティで以下のプロパティを設定できます。
署名を公開鍵で検証する場合(RS と ES アルゴリズム)、アルゴリズムの PublicKey プロパティに値を設定します。
署名をシークレットで検証する場合(HS アルゴリズム)、アルゴリズムの Secret プロパティに値を設定します。
JWT トークンを検証するには、TsgcHTTP_JWT_Server インスタンスを WebSocket/HTTP サーバーの Authentication.JWT.JWT プロパティに アタッチ するだけです。
oServer := TsgcWebSocketHTTPServer.Create(nil); oServer.Port := 80; oJWT := TsgcHTTP_JWT_Server.Create(nil); oJWT.JWTOptions.Algorithms.RS.PublicKey.Text := 'public key here'; oServer.Authorization.Enabled := True; oServer.Authorization.JWT.JWT := oJWT; oServer.Active := True;
Checks プロパティで JWT のペイロードに対するいくつかのチェックを有効化できます。デフォルトでは発行日時が有効かどうかをチェックします。
イベント
JWT トークン検証のフローを制御するには、以下のイベントを使用してください。
OnJWTBeforeRequest
このイベントは、新しい HTTP / WebSocket 接続 が検出され、検証が行われる前 に呼び出されます。この接続には JWT トークンが含まれている場合と含まれていない場合があります。
JWT 検証を使用してこの接続を処理したくない場合、Cancel パラメーターを True に設定してください(この接続は JWT 検証をバイパスします)。
デフォルトでは、すべての接続が JWT 検証プロセスを継続します。
OnJWTBeforeValidateToken
このイベントは、接続に Authorization トークンが含まれている ときに、検証される前 に呼び出されます。
このトークンを検証したくない場合、Cancel パラメーターを True に設定してください(この接続は JWT 検証をバイパスします)。
デフォルトでは、すべての接続が JWT 検証プロセスを継続します。
OnJWTBeforeValidateSignature
このイベントは、トークンがデコードされた 後に呼び出されるため、Header と Payload のパラメーターを使って JWT の内容にアクセスでき、署名が検証される前のタイミングとなります。
パラメーター Secret は署名の検証に使用されるシークレットで、JWTOptions プロパティの PublicKey または Secret を使用します。このトークンを別のシークレットで検証する必要がある場合、Secret パラメーターに新しい値を設定できます。
デフォルトでは、すべての署名が検証されます。
OnJWTAfterValidateToken
このイベントは署名が検証された後に呼び出され、Valid パラメーターは署名が正しいかどうかを示します。正しくない場合は接続が閉じられ、正しい場合は接続が継続します。
提供された引数を使って JWT の Header と Payload の内容にアクセスできます。
JWT の検証中にエラーがあった場合、Error 引数で通知されます。
OnJWTException
JWT のデコードと検証の処理中に例外が発生した場合、このイベントがエラー内容とともに呼び出されます。
