如何从JWT格式的自定义access_token获取声明

时间:2019-08-06 11:44:05

标签: c# security asp.net-core oauth-2.0 jwt

我正在编写一个ASP.NET Core Web API,该API应该在Bearer Token授权标头中接收OAuth2 access_token。连接到API的前端应用程序处理用户身份验证,并接收id_token(这是标准的JWT令牌)和一个access_token(将被传递到我的API)。该令牌采用JWT风格的格式,具有三部分header-payload-signature结构,但是它不是标准的JWT令牌,例如,没有audiss字段。此令牌的验证由外部授权服务处理-我使用令牌发出POST请求,如果令牌有效,则收到200 OK响应,否则返回400 Bad Request。我对发布令牌并执行验证的外部授权服务几乎没有任何影响。

所以我所有的API需要做的是:

  • 验证是否已将access_token作为不记名令牌传递
  • 通过POST发送该令牌,并确保响应为200
  • 获取该令牌中的声明
  • 根据声明执行自定义授权

以前我使用标准JWT令牌,但是从未遇到过这种有效性检查。我不知道该如何进行。我以前使用过Authentication.JwtBearer管道,但是它提供的验证是基于标准JWT令牌的,并且我看不到如何弯曲它以通过POST请求进行验证。此外,当我尝试至少使用它解析令牌时,在禁用ValidateAudienceValidateIssuer之后,我收到了“找不到签名密钥”错误,我什至不明白。我是否坚持编写自己的自定义身份验证中间件?甚至在获得任何自定义授权后,我将如何访问经过验证的令牌中的声明?使用标准管道,可以很容易地通过User.Claims访问它,而我现在还不麻烦。有没有更标准的,已经实施并经过测试的处理方式?也许我完全对如何完成这项任务完全误导了。

请注意,我实际上没有尝试过自己实施任何自定义身份验证,因为这听起来像是不得已而为之。如果我用安全手段搞砸了,那我将被烧死,这是理所当然的。

0 个答案:

没有答案