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.0
和Angular2 +
创建了这个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】:
您需要检查ValidIssue
和ValidAudience
中的值是否正确。
尝试删除配置索引器中的空格,即configuration["Tokens: Issuer"]
应该是configuration["Tokens:Issuer"]
。
【讨论】:
以上是关于JWT 令牌未经过验证,因此每次都返回 401 未授权的主要内容,如果未能解决你的问题,请参考以下文章
使用 JWT 处理 401(未授权)angularjs 身份验证
尝试访问我的 api 平台时未找到 JWT 令牌 401 错误?