如何在身份中发送 jwt 令牌中的用户角色

问题描述 投票:0回答:0

我已经完成了令牌生成,但我也想在令牌中发送用户角色。我也写了一些与发送角色相关的代码,但它不能正常工作。

我也有这个原型的问题。 var jwtAuthorizationManager = new JWTAuthorizationManager();

这是我的代码

公共类 JWTAuthorizationManager { 私人只读 UserManager _userManager;

    public JWTAuthorizationManager(UserManager<User> _userManager)
    {
        this._userManager = _userManager;
    }
    public async Task<JwtFeildsDto> Authenticate(string UserName, string PasswordHash)
    {
        var user = await _userManager.FindByNameAsync(UserName);
            //پیدا کردن همه نقش های کاربر


        var roles = await _userManager.GetRolesAsync(user);
        //ایجاد تاریخ انقضای توکن
        var tokenExpireTimeStamp = DateTime.Now.AddHours(Constansts.JWT_TOKEN_EXPIRE_TIME);
        //ایجاد متغیر از کلاس مشخص شده برای ایجاد توکن و اطلاعات همراه آن
        var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
        //ایجاد آرایه ای از بایت ها به عنوان کلید توکن
        var tokenKey = Encoding.ASCII.GetBytes(Constansts.JWT_SECURITY_KEY_FOR_TOKEN);
        //از این کلاس برای نگهداری ویژگیها و اطلاعات درون توکن استفاده می شود.
        var List = new List<Claim>()
            {
                new Claim("username", UserName),
                new Claim(ClaimTypes.PrimaryGroupSid,"User Group 01")

            };
        var securityTokenDescriptor = new SecurityTokenDescriptor
        {

            Subject = new ClaimsIdentity(List),

            Expires = tokenExpireTimeStamp,

            //امضا یا اعتبارنامه یا مجوز ورود
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(tokenKey),SecurityAlgorithms.HmacSha256Signature)
        };

        foreach (var item in roles)
        {
            List.Add(new Claim(ClaimTypes.Role, item));  

        }

        var securityToken = jwtSecurityTokenHandler.CreateToken(securityTokenDescriptor);
        var token = jwtSecurityTokenHandler.WriteToken(securityToken);
 

            return new JwtFeildsDto
            {
                token = token,
                user_name = UserName,
                expire_time = (int)tokenExpireTimeStamp.Subtract(DateTime.Now).TotalSeconds

            };

    }
   
}

    [HttpPost]

    public async Task<IActionResult> Login([FromForm] String userName, String 
password,bool remmberMe)
    {

        if (ModelState.IsValid)
        {
            var result = await _loginService.UserLogin(userName, password,remmberMe);

            if (result == true)
            {
                var jwtAuthorizationManager = new JWTAuthorizationManager();
                var loginResult = jwtAuthorizationManager.Authenticate(userName, password);
                return Ok(loginResult);
            }
            else
            {

                return Unauthorized(MessageLib.Message.unaAuthorized);
            }
        }

        return BadRequest();

    }
entity-framework asp.net-core
© www.soinside.com 2019 - 2024. All rights reserved.