【问题标题】:Using Delphi JOSE & JWT library, how do you sign a JWT using RS256使用 Delphi JOSE 和 JWT 库,如何使用 RS256 签署 JWT
【发布时间】:2020-09-04 01:03:41
【问题描述】:

他们所有的示例都使用 HS*** 而 RS*** 中没有,并且尝试将示例更改为套件似乎不起作用。

我的问题似乎是加载私钥以进行签名。我在字符串中使用 PEM,设置声明,使用这个

Procedure RunTest2b;
var
  LToken: TJWT;
  LSigner: TJWS;
  LKey: TJWK;
  LAlg: TJOSEAlgorithmId;
  s: String;
begin
  LToken := TJWT.Create;
  try
    LToken.Claims.Subject := 'Paolo Rossi';
    LToken.Claims.Issuer := 'Delphi JOSE Library';
    LToken.Claims.IssuedAt := Now;
    LToken.Claims.Expiration := Now + 1;
    // Signing algorithm
    LAlg := TJOSEAlgorithmId.RS256;
    LSigner := TJWS.Create(LToken);
    LKey := TJWK.Create(gPrivateKey);
    try
      // With this option you can have keys < algorithm length
      LSigner.SkipKeyValidation := True;
      LSigner.Sign(LKey, LAlg);
      s := 'Header: ' + LSigner.Header + #13#10 +
           'Payload: ' + LSigner.Payload + #13#10 +
           'Signature: ' + LSigner.Signature + #13#10 +
           'Compact Token: ' + LSigner.CompactToken;
      if s = '' then;
    finally
      LKey.Free;
      LSigner.Free;
    end;
  finally
    LToken.Free;
  end;
end;

这在签名方法中失败,说“无法加载私钥:”和一堆奇怪的字符,这使得看起来我应该有一个 ansistring 时可能有一个宽字符串,但改变它似乎没有帮助。

我也尝试过使用 TBase64.Decode 和 TBase64.UrlDecode 来转换密钥,然后再将它传递给 sign 方法,但没有成功。

谁能看出我哪里出错了?

【问题讨论】:

    标签: delphi jose


    【解决方案1】:

    我最近跳过了一些障碍,使用 JOSE 进行了一些 JWT 测试。我没有签署任何东西,但确实必须使用 PEM 来验证使用 RS 的 JWT。这样做时,我犯了一个错误,即在不保留换行符的情况下将 PEM 字符串连接成一行字符。我想知道你的钥匙是否也犯了同样的错误?

    i.e. bad PEM format
    myPem := '-----BEGIN PUBLIC KEY-----'
    + 'A23BBjhasdfbewisudvnacwerf823rdsvcp2'
    + 'bDenDfsub893rghvsaefawerd'
    + '-----END PUBLIC KEY-----';
    
    i.e. good PEM format
    myPem := '-----BEGIN PUBLIC KEY-----'
    + #13#10 + 'A23BBjhasdfbewisudvnacwerf823rdsvcp2'
    + #13#10 + 'bDenDfsub893rghvsaefawerd'
    + #13#10 + '-----END PUBLIC KEY-----';
    

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2016-02-27
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多