我正在尝试使用JwtBearerMiddleware在我的AspNetCore MVC应用程序(仅Web API)中实现JWT承载身份验证,但收到401
带有标头的响应:
WWW-Authenticate: Bearer error="invalid_token", error_description="The signature key was not found"
Startup.cs中的相关代码如下所示:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = "https://example.okta.com",
Audience = "myClientId"
});
使用授权URL,我希望中间件从中查询我的身份提供者元数据,https://example.okta.com/.well-known/openid-configuration
以从中获取jwks_uri
,然后从中获取签名密钥https://example.okta.com/oauth2/v1/keys
。我不认为这正在发生。我需要怎么做才能使其找到并使用签名密钥?谢谢
在遵循了引用并深入研究了AspNet Security存储库(特别是JwtBearerHandler
和JwtBearerMiddleware
类)之后,我进入了Azure扩展存储库中的Microsoft.IdentityModel命名空间(首先是类,然后是类(方法),然后是方法),最后我发现JwtBearerMiddleware确实确实从元数据中的jwks_uri获取了密钥。ewConfigurationManager<T>
OpenIdConnectConfigurationRetriever
GetAsync
JsonWebKeySet.GetSigningKeys()
那么为什么它不起作用呢?什么我应该早检查的是,孩子在承载JWT的头其实比赛并没有任何的的孩子从的jwks_uri,因此它没有被发现。这是我作为承载令牌发送的access_code。另一方面,id_token确实有一个匹配的孩子,因此使用它确实有效!
从那以后我读到:
OIDC访问令牌仅适用于Okta / oauth2 / v1 / userinfo端点,因此应被应用程序视为不透明。该应用程序不需要对其进行验证,因为它不应与其他资源服务器一起使用。它的格式和用于签名的密钥如有更改,恕不另行通知。来源
...所以我不能使用访问令牌。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句