JWT 令牌未经过验证,因此每次都返回 401 未授权

Posted

技术标签:

【中文标题】JWT 令牌未经过验证,因此每次都返回 401 未授权【英文标题】:JWT token is not validated therefore it returns 401 unauthorized every time 【发布时间】:2018-04-22 23:19:27 【问题描述】:

我有一个使用 JWT 令牌进行身份验证的 web 应用程序。我使用dotnetcore 2.0Angular2 + 创建了这个webapp。

我能够创建令牌。我可以用匿名模式检索数据。问题是当我授权控制器时我无法检索数据库值。控制器代码是:

namespace AuthDemo.Controllers

 [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
 //[Authorize]
 [Route("api/[Controller]")]

 public class ProductsController : Controller
 
    private readonly IProductRepository repository;
    public ProductsController(IProductRepository repository)
    
        this.repository = repository;

    

    [HttpGet]
    public IEnumerable<Product> Get()
    
        return repository.GetAllProducts();
    

 

我在startup.cs 中使用的代码 sn-p 如下:

        services.AddIdentity<AppUser, IdentityRole>(cfg =>
        
            cfg.User.RequireUniqueEmail = true;
        ).AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddAuthentication().AddCookie().AddJwtBearer(cfg =>
        
            cfg.TokenValidationParameters = new TokenValidationParameters()
            
                ValidIssuer = configuration["Tokens: Issuer"],
                ValidAudience = configuration["Tokens: Audience"],
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Tokens:Key"]))
            ;
        );

我还在configure app 方法的app.useMvc() 之前添加了app.UseAuthentication();

最后,我的 JWT 配置位于 appsettings.json 文件中,如下所示:

  "Tokens": 
     "Key": "hdhfdhskfhskdfhskdfsfSJLKSFJSDJFDSFKDSFKDSLKkd;dkflksdlf",
     "Issuer": "localhost", 
     "Audience": "http://localhost:5000/"
  

再次,我仍然得到 401 Unauthorized

【问题讨论】:

你是如何创建 jwt 令牌的?您使用的是 IdentityServer 还是 OpenIddict/ASOS?您的 ValidIssuer 和 ValidAudience 中的值是否正确?尝试删除配置索引器中的空间,即configuration["Tokens: Issuer"]=> configuration["Tokens:Issuer"] 我是个白痴!删除startup.cs 中的空格已经解决了这个问题! @Tseng 请发表您的评论作为解决方案 【参考方案1】:

您需要检查ValidIssueValidAudience中的值是否正确。

尝试删除配置索引器中的空格,即configuration["Tokens: Issuer"] 应该是configuration["Tokens:Issuer"]

【讨论】:

以上是关于JWT 令牌未经过验证,因此每次都返回 401 未授权的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 处理 401(未授权)angularjs 身份验证

尝试访问我的 api 平台时未找到 JWT 令牌 401 错误?

护照-jwt 总是返回 401 未授权

未找到 Lexik JWT 令牌

每当我发送包含 Bearer 令牌的请求时,ASP.Net Core API 总是返回 401 未授权

通过 AWS EC2 上的 Docker 容器发布时,Auth0 OWIN API 未验证 JWT 令牌