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

时间:2017-11-09 20:13:05

标签: angular asp.net-core asp.net-core-mvc jwt

我有一个使用JWT令牌进行身份验证的webapp。我使用dotnetcore 2.0Angular2 +创建了此网络应用。

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

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

1 个答案:

答案 0 :(得分:1)

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

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