当前正在关注此教程,了解如何实现 OAuth JWT 身份验证。目前被困在两件事上,这已经成为解决起来有点痛苦的事情。
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audienceId },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, audienceSecret)
}
});
不知道为什么我会收到此错误,因为所有必需的软件包都已安装。在另一个 IssuerSecurityKeyProviders 上存在,如果我选择使用这个或运行带有错误的构建,它将生成令牌,但是当我尝试访问 api 上的任何授权端点时,我会收到可怕的 "message": "此请求的授权已被拒绝。”
当我调试令牌时,所有似乎都匹配。发行者是相同的,受众 ID 是相同的,用户也确实存在于数据库中,但更改密码端点总是失败,如下面的屏幕截图所示。
最后但并非最不重要的一点是寻找一个我可以遵循的好教程来帮助我使用 JWT 和 OWIN 启动和运行 Web API 身份验证。大多数都已经过时,并且多年来软件包已经发生了变化,例如这个one,并且很难找到遇到的问题的答案。触感令人沮丧
较新版本的“Microsoft.Owin.Security.Jwt”库可能需要考虑一些重命名。试试这个:
// Api controllers with an [Authorize] attribute will be validated with JWT
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audienceId },
IssuerSecurityKeyProviders = new IIssuerSecurityKeyProvider[] {
new SymmetricKeyIssuerSecurityKeyProvider(issuer, audienceSecret)
}
});
这本质上是用“IssuerSecurityKeyProviders”代替“IssuerSecurityTokenProviders”,用“IIssuerSecurityKeyProvider”代替“IIssuerSecurityTokenProvider”。
关于一个很好的教程,我发现this帮助我解决了我遇到的类似问题