使用身份与令牌和Cookie身份验证(Using Identity with token and c

2019-09-28 01:19发布

我试着去设置令牌认证与我的应用程序同时Cookie身份验证。

我创建了asp.net核心2.0 MVC项目,单个用户帐户要权威性。 设置角色的用户了。

如果我按照肖恩Wildermuth本教程两AuthorizationSchemes式-ASP-NET-睿2

一切工作正常,以获得注册用户的令牌。 但是,如果使用中的作用属性上的授权[授权(角色=“管理员”)]即时得到一个403响应。

我认为这是因为令牌没有收到上AUTH的角色。

如何设置呢? 什么办法可以传递令牌过程中的作用?

为了产生他使用这段代码的令牌:

[AllowAnonymous] 
[HttpPost] 
public async Task<IActionResult> GenerateToken([FromBody] LoginViewModel model) {   if (ModelState.IsValid)   {
        var user = await _userManager.FindByEmailAsync(model.Email);

        if (user != null)
        {
          var result = await _signInManager.CheckPasswordSignInAsync(user, model.Password, false);
          if (result.Succeeded)
          {

            var claims = new[]
            {
              new Claim(JwtRegisteredClaimNames.Sub, user.Email),
              new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(_config["Tokens:Issuer"],
              _config["Tokens:Issuer"],
              claims,
              expires: DateTime.Now.AddMinutes(30),
              signingCredentials: creds);

            return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
          }
        }   }

      return BadRequest("Could not create token"); }

你们有什么想法?

谢谢

Answer 1:

如果您添加以下使用和代码,应该帮助。

using System.Security.Claims;

...

    var userRoles = await _userManager.GetRolesAsync(user);

    var claims = new[]
        {
          new Claim(JwtRegisteredClaimNames.Sub, user.Email),
          new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
        }.Union(userRoles.Select(m => new Claim(ClaimTypes.Role, m)));

你可以看到,增加了与ClaimTypes.Role的类型角色的联盟,这将使他们在AuthorizeAttribute使用

HTH



文章来源: Using Identity with token and cookie authentication