自 sgcWebSockets 4.4.8 起,服务器组件支持 JWT 令牌。
TsgcHTTP_JWT_Server 组件允许解码和验证使用 WebSocket 协议时在 WebSocket 握手中,或使用 HTTP 协议时作为 HTTP 请求头接收的 JWT 令牌。
配置
您可以在组件的 JWTOptions 属性中配置以下属性:
若使用公钥验证签名(RS 和 ES 算法),请在算法的 PublicKey 属性中设置值。
若使用密钥验证签名(HS 算法),请在算法的 Secret 属性中设置值。
要验证 JWT 令牌,只需将 TsgcHTTP_JWT_Server 实例附加到 WebSocket/HTTP 服务器的 Authentication.JWT.JWT 属性即可。
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 属性允许启用对 JWT Payload 的一些检查,默认检查签发日期是否有效。
事件
使用以下事件控制 JWT 令牌验证的流程。
OnJWTBeforeRequest
当检测到新的 HTTP / WebSocket 连接且在任何验证开始之前调用此事件。该连接可能包含或不包含 JWT 令牌。
若不想对此连接进行 JWT 验证,只需将 Cancel 参数设置为 True(表示此连接将跳过 JWT 验证)。
默认情况下,所有连接都会继续进行 JWT 验证。
OnJWTBeforeValidateToken
当连接包含 Authorization 令牌且在验证之前调用此事件。
若不想验证此令牌,只需将 Cancel 参数设置为 True(表示此连接将跳过 JWT 验证)。
默认情况下,所有连接都会继续进行 JWT 验证。
OnJWTBeforeValidateSignature
此事件在令牌解码后调用,因此通过 Header 和 Payload 参数可以访问 JWT 内容,且在签名验证之前触发。
参数 Secret 是用于验证签名的密钥,使用 JWTOptions 属性中的 PublicKey 或 Secret。若此令牌需要使用其他密钥验证,可将新值设置到 Secret 参数。
默认情况下,所有签名都会被验证。
OnJWTAfterValidateToken
签名验证完成后调用此事件,Valid 参数显示签名是否正确。若不正确则关闭连接,否则连接继续。
可通过提供的参数访问 JWT Header 和 Payload 的内容。
若验证 JWT 时发生任何错误,将通过 Error 参数告知。
OnJWTException
若在处理 JWT 解码和验证过程中发生任何异常,将调用此事件并传入错误内容。
