delphi jwt
JWT使用流程如下:
1)用戶使用用戶名密碼來請求服務器
2)服務器進行驗證用戶的信息
3)服務器通過驗證發送給用戶一個token
4)客戶端存儲token,並在每次請求時附送上這個token值
5)服務端驗證token值,並返回數據
說明:token是服務端簽發的,TOKEN是經過加密且base64url()算法后得到的字符串。
優點
1)JWT是可以進行跨語言支持的,大多數語言都能實現
2)JWT可以存儲一些其他業務邏輯所必要的非敏感信息
3)JWT構成非常簡單,字節占用很小,所以非常便於傳輸
4)它不需要在服務端保存會話信息, 所以它易於應用的擴展
注意點
1)因為payload部分可解密,所以不要放敏感信息
2)一定要保護好秘鑰,有了秘鑰就能自由簽發JWT
uses
JOSE.Core.JWT, JOSE.Core.JWA, JOSE.Core.Builder, JOSE.Types.JSON,
const secrec = 'key'; //密鑰
function signature: string;
//簽名
begin
{iss (issuer):簽發人
exp (expiration time):過期時間
sub (subject):主題
aud (audience):受眾
nbf (Not Before):生效時間
iat (Issued At):簽發時間
jti (JWT ID):編號 }
var jwt: TJWT := TJWT.Create;
jwt.Claims.IssuedAt := now; //jwt簽發時間
jwt.Claims.Expiration := Now + 1; //jwt過期時間
Result := TJOSE.SerializeCompact(secrec, TJOSEAlgorithmId.HS256, jwt);
jwt.free;
end;
function verify(const token: string): Boolean;
//驗證簽名
begin
var jwt: TJWT := TJOSE.Verify(secrec, token);
Result := jwt.Verified;
jwt.free;
end;
