JWT 클라이언트를 사용할 때 사용할 openSSL 라이브러리를 구성하십시오.
TsgcHTTP_JWT_Client 구성 요소를 사용하면 JWT Tokens를 인코딩하고 서명하여, WebSocket Client 또는 HTTP/2 client에 첨부할 수 있습니다. 토큰은 Authorization Bearer Token Header로 자동 전송됩니다.
JWTOptions 속성에서 JWT 값을 구성할 수 있습니다. 2개의 주요 속성이 있습니다: Header 와 Payload. 필요한 각 속성에 대해 값을 설정하기만 하면 됩니다.
Signature가 Private Key(RS 및 ES 알고리즘)를 사용하여 암호화된 경우, Algorithm의 PrivateKey 속성에 값을 설정하십시오.
Signature가 Secret(HS 알고리즘)을 사용하여 암호화된 경우, Algorithm의 Secret 속성에 값을 설정하십시오.
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를 로드하지 않습니다.
Header 및 Payload 속성에는 JWT를 생성하는 데 사용되는 가장 일반적인 헤더가 포함되어 있지만, AddKeyValue 메서드를 호출하고 Key와 Value를 매개변수로 전달하여 더 많은 헤더를 추가할 수 있습니다.
예제: JWT Header에 이름이 있는 새 레코드를 추가하려면 다음 메서드를 사용하십시오
Header.AddKeyValue('name', 'John Smith');
속성을 구성한 후 JWT를 생성하려면 Sign 메서드를 호출하기만 하면 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;
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');
Authorization Token은 HTTP 클라이언트를 사용하여 HTTP 요청을 보낼 때마다 매번 다시 생성되거나 만료될 때까지 여러 번 재사용될 수 있습니다.
예제: 토큰을 사용하여 Apple APNs를 호출하려면 토큰이 최소 20분 동안 최대 1시간 동안 재사용되어야 합니다. RefreshTokenAfter 속성을 사용하여 토큰이 만료되는 초를 설정하십시오. 예를 들어 30분 후입니다.
RefreshTokenAfter = 60 * 40.
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);