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 디코딩 및 검증을 처리하는 중 예외가 발생하면 이 이벤트가 오류 내용과 함께 호출돼요.
