问题描述
我使用:Delphi JOSE and JWT Library 和 OpenSSL libraries 1.0.2 版
uses
...
JSON,System.DateUtils,JOSE.Core.JWT,JOSE.Core.JWS,JOSE.Core.JWK,JOSE.Core.JWA;
...
procedure TForm1.Button1Click(Sender: TObject);
var
LToken: TJWT;
LSigner: TJWS;
LKey: TJWK;
LAlg: TJOSEAlgorithmId;
LPrivateKey,LPublicKey,LClaims,LHeader: TJSONObject;
LKeys: TKeyPair;
begin
LToken := TJWT.Create;
LPrivateKey := TJSONObject.Create;
LPrivateKey.AddPair('kty','EC');
LPrivateKey.AddPair('alg','ES256');
LPrivateKey.AddPair('crv','P-256');
LPrivateKey.AddPair('x','sDbcYT8HzBk1tUl849ZHrhpIn8ZV7HfD1DwYdsP1ip0');
LPrivateKey.AddPair('y','EWodfKWQ6oE0ppyi7tRO_61BgAQsZyDjDGj9kLZiUts');
LPrivateKey.AddPair('d','Rwyv99W3GnfjYbI0X-b5Umhvh88oRCKQkPxiwCPVGgg');
LKeys := TKeyPair.Create;
LKeys.PrivateKey.Key := LPrivateKey.ToString;
LClaims := TJSONObject.Create;
LClaims.AddPair('email','myemail@mail.com');
LClaims.AddPair('aud','usr');
LClaims.AddPair('iat',TJSONNumber.Create(DateTimetoUnix(TTimeZone.Local.ToUniversalTime(Now))));
LClaims.AddPair('jti','0x'+IntToHex(Random(High(Integer))));
LHeader := TJSONObject.Create;
LHeader.AddPair('alg','ES256');
LHeader.AddPair('kid','1');
LToken.Header.JSON := LHeader;
LToken.Claims.JSON := LClaims;
LAlg := TJOSEAlgorithmId.ES256;
LSigner := TJWS.Create(LToken);
LSigner.Skipkeyvalidation := True;
// Sign the token!
LSigner.Sign(LKeys.PrivateKey,LAlg);
Memo1.Lines.Add('Header: ' + LSigner.Header);
Memo1.Lines.Add('Payload: ' + LSigner.Payload);
Memo1.Lines.Add('Signature: ' + LSigner.Signature);
Memo1.Lines.Add('Compact Token: ' + LSigner.CompactToken);
end;
签名令牌时出现错误:
Exception class ESignException with message '[ECDSA] Unable to load private key:
error:0906D06C:lib(9):func(109):reason(108)'
我怀疑私钥需要以不同的格式提交。在 Delphi JOSE 和 JWT 库示例中,私钥存储在 PM 文件中,格式如下:
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIFzS3/5bCnrlpa4902/zkYzUQF6E2D8pazgnKu4smhpQoAoGCCqLSM49
AwEHoUQDQgBEqTjyg2z65i+zbyUXW8BQ+K87DNsICRaEH7Fy7Nm3MseXy9ItSCQU
VeJbtO6kYUA00mx7bKoC1sx5sbtFExnYPQ==
-----END EC PRIVATE KEY-----
它看起来像 base64,但是当我将密钥转换为 base64 时,库返回相同的错误。我很乐意提供任何建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)