使用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仓库 (特别是JwtBearerHandler
和JwtBearerMiddleware
类)之后,这导致我进入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它,因为它不应该用于其他资源服务器。 它的格式和用于签名的密钥如有更改,恕不另行通知。 资源
…所以我不能使用访问令牌。
- 无法排队测试运行’xxxx 2011-10-20 13:00:00’。 您没有相应的权限来执行操作
- 如果语句在转发器中使用ItemTemplate
- C#:如何以编程方式检查Web服务是否已启动并正在运行?
- preCondition =“managedHandler”如何为模块工作?
- asp.net c#将数据集中的数据转换为电子邮件正文?
- JSON.NET DataContractJsonSerializer和Newtonsoft JSON序列化程序有什么区别
- 如何序列化NHibernate DetachedCriteria对象?
- Silverlight DataGrid:导出到excel或csv
- 使用gsm调制解调器从C#应用程序发送接收短信的基本概念