JWT Delphi 서버

· 컴포넌트

sgcWebSockets 4.4.8부터 서버 컴포넌트에서 JWT 토큰이 지원돼요.

TsgcHTTP_JWT_Server 컴포넌트는 WebSocket 프로토콜 사용 시 WebSocket 핸드셰이크에서 받은 JWT 토큰을, 또는 HTTP 프로토콜 사용 시 HTTP 헤더로 받은 JWT 토큰을 디코딩하고 검증할 수 있어요.

설정 

컴포넌트의 JWTOptions 속성에서 다음 속성들을 설정할 수 있어요:

서명이 공개 키(RS 및 ES 알고리즘)로 검증되면 알고리즘의 PublicKey 속성에 값을 설정하세요.

서명이 비밀(HS 알고리즘)로 검증되면 알고리즘의 Secret 속성에 값을 설정하세요.

JWT 토큰을 검증하려면 WebSocket/HTTP 서버의 Authorization.JWT.JWT 속성에 TsgcHTTP_JWT_Server 인스턴스를 연결하면 돼요.

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 property allows to enable some checks in the Payload of JWT, 기본적으로 발급 날짜가 유효한지 확인해요.

Events 

다음 이벤트를 사용해 JWT 토큰 검증 흐름을 제어할 수 있어요.

OnJWTBeforeRequest

이 이벤트는 새 HTTP / WebSocket 연결이 감지되고 검증이 수행되기 전에 호출돼요. 이 연결에 JWT 토큰이 포함될 수도 있고 포함되지 않을 수도 있어요.

이 연결을 JWT 검증으로 처리하지 않으려면 Cancel 매개변수를 True로 설정하세요(이 연결이 JWT 검증을 건너뜀을 의미해요).

기본적으로 모든 연결은 JWT 검증 과정을 계속해요.

OnJWTBeforeValidateToken

이 이벤트는 연결에 권한 부여 토큰이 포함되고 검증되기 전에 호출돼요.

이 토큰을 검증하지 않으려면 Cancel 매개변수를 True로 설정하세요(이 연결이 JWT 검증을 건너뜀을 의미해요).

기본적으로 모든 연결은 JWT 검증 과정을 계속해요.

OnJWTBeforeValidateSignature

이 이벤트는 토큰이 디코딩된 후 호출되어요. Header 및 Payload 매개변수를 사용해 JWT 내용에 접근할 수 있으며 서명이 검증되기 전이에요.

Secret 매개변수는 서명 검증에 사용될 비밀로 JWTOptions 속성의 PublicKey 또는 Secret을 사용해요. 이 토큰을 다른 비밀로 검증해야 하면 Secret 매개변수에 새 값을 설정할 수 있어요.

기본적으로 모든 서명이 검증돼요

OnJWTAfterValidateToken

이 이벤트는 서명이 검증된 후 호출되며, Valid 매개변수가 서명의 올바름을 나타내요. 올바르지 않으면 연결이 종료되고, 그렇지 않으면 연결이 계속돼요.

제공된 인수를 사용해 JWT의 Header 및 Payload 내용에 접근할 수 있어요.

JWT 검증 중 오류가 있으면 Error 인수로 알려줘요.

OnJWTException

JWT 디코딩 및 검증을 처리하는 중 예외가 발생하면 이 이벤트가 오류 내용과 함께 호출돼요.