他们所有的示例都使用 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 方法之前对其进行转换,但没有成功。
谁能看到我在哪里犯了错误?