ASP.NET Core 2.0 API控制器中的User.Identity.Name为空 [英] User.Identity.Name is empty in Asp.NET Core 2.0 API Controller

查看:17
本文介绍了ASP.NET Core 2.0 API控制器中的User.Identity.Name为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对ASP.NET核心本身不熟悉。但是,我在ASP.NET Core 2.0中创建WebAPI。我已经配置了基于JWT承载令牌的身份验证。下面是我的控制器,它返回令牌。

    [AllowAnonymous]
[Route("api/[controller]")]
public class TokenController : Controller
{
    private readonly UserManager<UserEntity> userManager;
    private readonly SignInManager<UserEntity> signInManager;

    public TokenController(UserManager<UserEntity> userManager, SignInManager<UserEntity> signInManager)
    {
        this.userManager = userManager;
        this.signInManager = signInManager;
    }

    // GET: api/values
    [HttpGet]
    public async Task<IActionResult> Get(string username, string password, string grant_type)
    {
        {
            var user = await userManager.FindByEmailAsync(username);

            if (user != null)
            {
                var result =await signInManager.CheckPasswordSignInAsync(user, password, false);
                if (result.Succeeded)
                {

                    var claims = new[]
                    {
                        new Claim( JwtRegisteredClaimNames.Sub, username),
                        new Claim( JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                        new Claim( JwtRegisteredClaimNames.GivenName, "SomeUserID")
                    };

                    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secretesecretesecretesecretesecretesecrete"));
                    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                    var token = new JwtSecurityToken( issuer: "test",
                                                     audience: "test",
                                                     claims: claims,
                                                      expires: DateTime.Now.AddDays(15),
                                                      signingCredentials: creds);

                    return Ok(new { access_token = new JwtSecurityTokenHandler().WriteToken(token), expires_on=DateTime.Now.AddDays(15) });

                }
            }
        }

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


}

但在调用用[Authorize]属性修饰的ValuesController API时。我正在获取User.Identity.Name为空。我没有得到任何关于用户的信息。我不确定,我的令牌控制器写得正确。只要它是在保护我的ValuesController,我想它就是正确的。然而,我可能遗漏了一些东西。请帮帮忙。

注意:我正在使用Visual Studio 2017和Mac社区进行开发 添加

推荐答案

是,您需要指定唯一名称的声明,该名称将转换为用户。标识。名称:

new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName)

这篇关于ASP.NET Core 2.0 API控制器中的User.Identity.Name为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆