我有一个使用JWT令牌进行身份验证的webapp。我使用dotnetcore 2.0
和Angular2 +
创建了此网络应用。
我可以创建令牌。我可以使用匿名模式检索数据。问题是我授权控制器时无法检索数据库值。控制器代码是:
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
中使用的代码段如下:
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"]))
};
});
我还在app.UseAuthentication();
之前的configure app
方法中添加了app.useMvc()
。
最后,我的JWT配置位于appsettings.json
文件中,如下所示:
"Tokens": {
"Key": "hdhfdhskfhskdfhskdfsfSJLKSFJSDJFDSFKDSFKDSLKkd;dkflksdlf",
"Issuer": "localhost",
"Audience": "http://localhost:5000/"
}
同样,我仍然 401 Unauthorized 。
答案 0 :(得分:1)
您需要检查ValidIssue
和ValidAudience
中的值是否正确。
尝试删除配置索引器中的空格,即configuration["Tokens: Issuer"]
应为configuration["Tokens:Issuer"]
。