TsgcHTTP_JWT_Client

JWT クライアント使用時に使用する OpenSSL ライブラリを設定します。

はじめに

TsgcHTTP_JWT_Clientコンポーネントを使用すると、JWTトークンをエンコードして署名できます。WebSocketクライアントまたはHTTP/2クライアントにアタッチすることで、トークンが自動的にAuthorization Bearer Tokenヘッダーとして送信されます。

設定

JWTOptions プロパティでJWT値を設定できます。HeaderPayloadという2つのメインプロパティがあります。必要なプロパティごとに値を設定してください。

 

署名がプライベートキー(RS および ES アルゴリズム)を使用して暗号化されている場合は、アルゴリズムの PrivateKey プロパティに値を設定してください。

シグネチャが Secret を使用して暗号化されている場合 (HS アルゴリズム)、 Algorithm の Secret プロパティに 値を設定します。

 

OpenSSL オプション

JWT クライアント使用時に使用する OpenSSL ライブラリを設定します。

 

OpenSSL_Options: OpenSSL ライブラリの設定。

APIVersion: 使用する OpenSSL API を定義できます。

oslAPI_1_0: API 1.0 OpenSSL を使用します。Indy で最後にサポートされたバージョンです。

oslAPI_1_1: API 1.1 OpenSSL を使用します。カスタム Indy ライブラリが必要で、OpenSSL 1.1.1 ライブラリ(TLS 1.3 サポートあり)を使用できます。

oslAPI_3_0: API 3.0 OpenSSL を使用します。カスタム Indy ライブラリが必要で、OpenSSL 3.0.0 ライブラリ(TLS 1.3 サポートあり)を使用できます。

LibPath: openSSLライブラリの場所を設定できます

oslpNone: これはデフォルトです。openSSLライブラリは、バイナリと同じフォルダー、または既知のパスに ある必要があります。

oslpDefaultFolder: すべてのIDEパーソナリティに対してライブラリが配置されるべきopenSSLパスを自動的に設定します。

oslpCustomFolder: このオプションが選択されている場合、プロパティ LibPathCustom にフルパスを定義します。

LibPathCustom: LibPath = oslpCustomFolder の場合、openSSL ライブラリが格納されているフォルダーの完全パスをここで定義します。

UnixSymLinks: Unix システムでシンボリックリンクの読み込みを有効または無効にします(デフォルトでは有効です。OSX64 は除きます)。

oslsSymLinksDefault: デフォルトでは有効です。ただし OSX64 では無効です(MacOS Monterey 以降、バージョンなしでライブラリを読み込もうとすると失敗するため)。

oslsSymLinksLoadFirst: SymLinksを読み込み、バージョンライブラリを読み込む前に行います。

oslsSymLinksLoad: バージョンライブラリの読み込みを試みた後にシンボリックリンクを読み込みます。

oslsSymLinksDontLoad: SymLinksを読み込みません。

 

カスタムヘッダー

Header プロパティと Payload プロパティには JWT を生成するために使用される最も一般的なヘッダーが含まれていますが、 AddKeyValue メソッドを呼び出してキーと値をパラメータとして渡すことで さらにヘッダーを追加できます。

例:JWT ヘッダーに名前の新しいレコードを追加したい場合は、次のメソッドを使用します。

 


    Header.AddKeyValue('name', 'John Smith');

 

プロパティを設定した後、JWTを生成するには、 メソッドSignを呼び出すだけで、JWTの 値が返されます。

 

WebSocket クライアントと JWT

TsgcWebSocketClient では、WebSocketサーバーに接続する際にJWTを使用できます。新しいJWTクライアントを作成し、 Authentication.Token.JWT プロパティに割り当てるだけです。

 


    oClient := TsgcWebSocketClient.Create(nil);
    oClient.URL := 'ws://www.esegece.com:2052';
    
oJWT := TsgcHTTP_JWT_Client.Create(nil); oJWT.JWTOptions.Header.alg := jwtRS256; oJWT.JWTOptions.Payload.sub := '1234567890'; oJWT.JWTOptions.Payload.iat := 1516239022;
oClient.Authentication.Enabled := True; oClient.Authentication.URL.Enabled := False; oClient.Authentication.Token.Enabled := True; oClient.Authentication.Token.JWT := oJWT; oClient.Active := True;

 

HTTP クライアントと JWT

TsgcHTTP2Client およびTsgcHTTP1Clientでは、HTTP/2サーバーに接続する際にJWTを使用できます。新しいJWTクライアントを作成し、 Authentication.Token.JWT プロパティに割り当てるだけです。

 


    oHTTP := TsgcHTTP2Client.Create(nil);
    
oJWT := TsgcHTTP_JWT_Client.Create(nil); oJWT.JWTOptions.Header.alg := jwtRS256; oJWT.JWTOptions.Payload.sub := '1234567890'; oJWT.JWTOptions.Payload.iat := 1516239022;
oHTTP.Authentication.Token.JWT := oHTTP; oHTTP.Get('https://your.api.com');

 

有効期限

認証トークンは HTTP クライアントを使用して HTTP リクエストを送信するたびに再作成することも、期限が切れるまで何度も再利用することもできます。

例: トークンを使用して Apple APNs を呼び出す場合、トークンは少なくとも 20 分間再利用され、最大 1 時間使用されることが必要です。プロパティ RefreshTokenAfter を使用して、トークンが期限切れになるまでの秒数を設定します(例えば 30 分後)。


    RefreshTokenAfter = 60 * 40.

 

JWT 署名の作成

WebSocketまたはHTTPプロトコルを使用しないアプリケーション、あるいはサードパーティのアプリケーションのコンポーネントを使用していてJWT Tokenのみが必要な場合に使用するために、JWT署名を手動で作成できます。

 

JWT署名を取得するには、 新しいJWT Clientのインスタンスを作成し、プロパティを手動で入力します。すべてのプロパティが 設定されたら、Signメソッドを呼び出すと JWTトークンが返されます。

 


    oJWT := TsgcHTTP_JWT_Client.Create(nil);
    // ... header
    oJWT.JWTOptions.Header.alg := jwtHS256;
    oJWT.JWTOptions.Algorithms.HS.Secret := '79F66F1E-E998-436B-8A0A-3E5DEFA4FD9E';
    // ... payload
    oJWT.JWTOptions.Payload.jti := '9B66FB94-B761-42B1-A1AF-3C44233DBE87';
    oJWT.JWTOptions.Payload.iat := 1630925658;
    oJWT.JWTOptions.Payload.iss := '2886EC7547B7BA6A9009';
    oJWT.JWTOptions.Payload.exp := 1630933158;
    // ... custom payload values
    oJWT.JWTOptions.Payload.ClearKeyValues;
    oJWT.JWTOptions.Payload.AddKeyValue('origin', 'www.yourwebsite.com');
    oJWT.JWTOptions.Payload.AddKeyValue('ip', '69.39.46.178');
    // ... get JWT Token
    ShowMessage(oJWT.Sign);

 

リファレンス