请求PoP令牌


layout: docs-default

请求 PoP 令牌

注意 文档处于beta版状态

PoP访问令牌可以作为申请授权码或者更新令牌流程的一部分
这个规格允许一系列的变异,但是IdentityServer现在仅支持客户端生成非对称密钥证据。

简单来说,它是这样工作的:

  1. 客户端生成一对密钥(比如:RSA或者EC)
  2. 客户端在申请访问令牌时把公钥发给IdentityServer
  3. identityserver 把密钥嵌入到访问令牌中(在cnf 声明中)
  4. 客户端用私钥签名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);

完整代码可以请看这里 here.
这里有另外一个例子here.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • PKI 基础知识 (摘自Microsoft Windows 2000 Server白皮书,2000年7月5日发布)...
    right_33cb阅读 4,514评论 0 1
  • 信息安全三要素 1. 保密性:信息在传输时不被泄露 2. 完整性:信息在传输时不被篡改 3. 身份认证:用于确定你...
    Jason1226阅读 5,214评论 0 0
  • 原文地址 https://mbinary.coding.me/introduction-to-bitcoin.ht...
    mbinary阅读 10,869评论 0 4
  • 前面两篇文章中关于 HTTP 相关知识基本上介绍的差不多了,这篇文章是对 HTTP 协议的补充,主要介绍以下三点内...
    lijiankun24阅读 5,115评论 2 3
  • 生活,自有酸甜苦辣,就好像调色板。生活,多姿多彩,就好像一部连续剧,从中有酸有甜,有苦有辣。总之,生活需要色彩才会...
    楠小娱阅读 1,358评论 0 2