TsgcHTTP_JWT_Client

JWT 클라이언트를 사용할 때 사용할 openSSL 라이브러리를 구성하십시오.

소개

TsgcHTTP_JWT_Client 구성 요소를 사용하면 JWT Tokens를 인코딩하고 서명하여, WebSocket Client 또는 HTTP/2 client에 첨부할 수 있습니다. 토큰은 Authorization Bearer Token Header로 자동 전송됩니다.

구성

JWTOptions 속성에서 JWT 값을 구성할 수 있습니다. 2개의 주요 속성이 있습니다: HeaderPayload. 필요한 각 속성에 대해 값을 설정하기만 하면 됩니다.

 

Signature가 Private Key(RS 및 ES 알고리즘)를 사용하여 암호화된 경우, Algorithm의 PrivateKey 속성에 값을 설정하십시오.

Signature가 Secret(HS 알고리즘)을 사용하여 암호화된 경우, Algorithm의 Secret 속성에 값을 설정하십시오.

 

OpenSSL Options

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 시스템에서 SymLinks 로딩을 활성화하거나 비활성화합니다(기본적으로 활성화되어 있으며, OSX64에서는 예외):

oslsSymLinksDefault: 기본적으로 활성화되지만 OSX64에서는 예외입니다(MacOS Monterey 이후 버전 없이 라이브러리를 로드하려고 하면 실패함).

oslsSymLinksLoadFirst: 버전 라이브러리를 로드하기 전에 SymLink를 로드하고 먼저 시도합니다.

oslsSymLinksLoad: 버전 라이브러리를 로드하려고 시도한 후 SymLinks를 로드합니다.

oslsSymLinksDontLoad: SymLinks를 로드하지 않습니다.

 

Custom Headers

Header 및 Payload 속성에는 JWT를 생성하는 데 사용되는 가장 일반적인 헤더가 포함되어 있지만, AddKeyValue 메서드를 호출하고 Key와 Value를 매개변수로 전달하여 더 많은 헤더를 추가할 수 있습니다.

예제: JWT Header에 이름이 있는 새 레코드를 추가하려면 다음 메서드를 사용하십시오

 


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

 

속성을 구성한 후 JWT를 생성하려면 Sign 메서드를 호출하기만 하면 JWT의 값을 반환합니다.

 

WebSocket Client and 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 Clients and JWT

TsgcHTTP2ClientTsgcHTTP1Client는 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');

 

만료

Authorization Token은 HTTP 클라이언트를 사용하여 HTTP 요청을 보낼 때마다 매번 다시 생성되거나 만료될 때까지 여러 번 재사용될 수 있습니다.

예제: 토큰을 사용하여 Apple APNs를 호출하려면 토큰이 최소 20분 동안 최대 1시간 동안 재사용되어야 합니다. RefreshTokenAfter 속성을 사용하여 토큰이 만료되는 초를 설정하십시오. 예를 들어 30분 후입니다.


    RefreshTokenAfter = 60 * 40.

 

JWT 서명 생성

WebSocket 또는 HTTP Protocol을 사용하지 않는 애플리케이션에서 사용하거나, 서드파티 애플리케이션의 구성 요소를 사용하고 JWT Token만 필요한 경우 JWT Signature를 수동으로 만들 수 있습니다.

 

JWT Signature를 얻으려면 JWT 클라이언트의 새 인스턴스를 만들고 속성을 수동으로 채운 다음, 모든 속성이 설정되면 Sign 메서드를 호출하면 JWT Token을 반환합니다.

 


    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);

 

참조