7

目前正在关注如何实现 OAuth JWT 身份验证的本教程。目前卡在两件事上,解决起来有点痛苦。

  1. 下面的代码会引发“定义”和“命名空间”错误。
app.UseJwtBearerAuthentication(
                new JwtBearerAuthenticationOptions
                {
                    AuthenticationMode = AuthenticationMode.Active,
                    AllowedAudiences = new[] { audienceId },
                    IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
                    {
                        new SymmetricKeyIssuerSecurityTokenProvider(issuer, audienceSecret)
                    }
                });

如下图所示是错误: 在此处输入图像描述

不知道为什么我会收到这个错误,因为所有必要的软件包都已安装。在另一个 IssuerSecurityKeyProviders 上,如果我选择使用这个或运行带有错误的构建,它将生成令牌,但是当我尝试访问 api 上的任何授权端点时,我会收到可怕的“消息”:“授权此请求已被拒绝。”

当我调试令牌时,一切似乎都匹配。发行者相同,受众 ID 相同,并且用户也确实存在于数据库中,但 changepassword 端点总是失败,如下面的屏幕截图所示。

在此处输入图像描述

最后但并非最不重要的是寻找一个我可以遵循的好教程,以帮助我使用 JWT 和 OWIN 启动和运行 Web API 身份验证。大多数已经过时,并且多年来软件包已经改变,例如这个很难找到遇到问题的答案。令人沮丧的触摸

4

1 回答 1

17

较新版本的“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”。

于 2019-06-23T17:26:58.677 回答