使用JwtBearerAuthentication签名密钥

我正在尝试使用JwtBearerMiddleware在我的AspNetCore MVC应用程序(仅限Web API)中实现JWT承载身份validation,但我收到了带有标头的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获取签名密钥https://example.okta.com/oauth2/v1/keys 。 我不认为这种情况正在发生。 我需要做些什么才能找到并使用签名密钥? 谢谢

在跟踪引用并深入研究AspNet Security仓库 (特别是JwtBearerHandlerJwtBearerMiddleware类)之后,这导致我进入Azure Extensions JwtBearerMiddleware中的Microsoft.IdentityModel命名空间(首先是ConfigurationManager类,然后是OpenIdConnectConfigurationRetriever类( GetAsync方法),然后到JsonWebKeySet.GetSigningKeys()方法),我终于发现JwtBearerMiddleware确实从元数据中的jwks_uri获取了密钥。 唷。

那为什么不工作呢? 我之前应该检查的是,持票人JWT标题中的孩子实际上并不匹配jwks_uri中的任何一个孩子 ,因此没有找到。 这是我作为持票人令牌发送的access_code。 另一方面,id_token确实有一个匹配的孩子 ,所以使用它而不是它的工作!

我读过:

OIDC访问令牌仅适用于Okta / oauth2 / v1 / userinfo端点,因此应被应用程序视为不透明。 应用程序不需要validation它,因为它不应该用于其他资源服务器。 它的格式和用于签名的密钥如有更改,恕不另行通知。 资源

…所以我不能使用访问令牌。