我正在编写一个ASP.NET Core Web API,该API应该在Bearer Token授权标头中接收OAuth2 access_token。连接到API的前端应用程序处理用户身份验证,并接收id_token(这是标准的JWT令牌)和一个access_token(将被传递到我的API)。该令牌采用JWT风格的格式,具有三部分header-payload-signature结构,但是它不是标准的JWT令牌,例如,没有aud
或iss
字段。此令牌的验证由外部授权服务处理-我使用令牌发出POST请求,如果令牌有效,则收到200 OK响应,否则返回400 Bad Request。我对发布令牌并执行验证的外部授权服务几乎没有任何影响。
所以我所有的API需要做的是:
以前我使用标准JWT令牌,但是从未遇到过这种有效性检查。我不知道该如何进行。我以前使用过Authentication.JwtBearer
管道,但是它提供的验证是基于标准JWT令牌的,并且我看不到如何弯曲它以通过POST请求进行验证。此外,当我尝试至少使用它解析令牌时,在禁用ValidateAudience
和ValidateIssuer
之后,我收到了“找不到签名密钥”错误,我什至不明白。我是否坚持编写自己的自定义身份验证中间件?甚至在获得任何自定义授权后,我将如何访问经过验证的令牌中的声明?使用标准管道,可以很容易地通过User.Claims
访问它,而我现在还不麻烦。有没有更标准的,已经实施并经过测试的处理方式?也许我完全对如何完成这项任务完全误导了。
请注意,我实际上没有尝试过自己实施任何自定义身份验证,因为这听起来像是不得已而为之。如果我用安全手段搞砸了,那我将被烧死,这是理所当然的。