layout: docs-default
请求 PoP 令牌
注意 文档处于beta版状态
PoP访问令牌可以作为申请授权码或者更新令牌流程的一部分
这个规格允许一系列的变异,但是IdentityServer现在仅支持客户端生成非对称密钥证据。
简单来说,它是这样工作的:
- 客户端生成一对密钥(比如:RSA或者EC)
- 客户端在申请访问令牌时把公钥发给IdentityServer
- identityserver 把密钥嵌入到访问令牌中(在cnf 声明中)
- 客户端用私钥签名HTTP请求,资源服务器使用公钥来验证访问令牌。
生成密钥对
// create key pair
var p = RsaPublicKeyJwk.CreateProvider();
var key = p.ExportParameters(false);
// package public key part as a JWK
var jwk = RsaPublicKeyJwk.CreateJwk(key);
var jwk64 = RsaPublicKeyJwk.CreateJwkString(jwk);
请求 PoP 令牌
首先通过授权码流程申请一个令牌,然后把公钥发随着令牌发过去。
var tokenClient = new TokenClient(
IdentityServerPipeline.TokenEndpoint,
ClientId,
ClientSecret);
var tokenResponse = await tokenClient.RequestAuthorizationCodePopAsync(
authResponse.Code,
ClientRedirectUri,
key: jwk64,
algorithm: jwk.alg);
发送一个令牌
我们的PoP客户端会签名发出的HTTP请求
// configure signing details
var signature = new RS256Signature(p);
var signingOptions = new RequestSigningOptions();
var signingHandler = new HttpSigningMessageHandler(signature, signingOptions);
// set pop token
var client = new HttpClient(signingHandler);
client.SetToken("PoP", tokenResponse.AccessToken);
// call API
var apiResponse = await client.GetAsync(WebApiPipeline.Endpoint);
网友评论