0

我正在尝试制作 api

这是我获取授权令牌的登录信息

  public IActionResult Login(string Username,string Password)
    {
        if (ModelState.IsValid)
        {
            string user = GetAuth(Username, Password);
            if (user == null)
            {
                return Unauthorized();
            }

            var claims = new[]
            {
        new System.Security.Claims.Claim(JwtRegisteredClaimNames.Sub, Username),
        new System.Security.Claims.Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
    };

            var token = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken
            (
                issuer: "" ,
                audience: "",//appsettings.json içerisinde bulunan audince değeri
                claims: claims,
                expires: DateTime.UtcNow.AddDays(30), // 30 gün geçerli olacak
                notBefore: DateTime.UtcNow,
                signingCredentials: new Microsoft.IdentityModel.Tokens.SigningCredentials(new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("aaa wssadsa adsad sa  rasd as")),//appsettings.json içerisinde bulunan signingkey değeri
                        Microsoft.IdentityModel.Tokens.SecurityAlgorithms.HmacSha256)
            ) ;
            Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;

            return Ok(new { token = new System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler().WriteToken(token) });
        }
        else
        {
            return BadRequest();
        }

    }

现在我想使用邮递员进行测试。在授权选项卡的邮递员 UI 中,我输入了用户名和密码,然后单击发送按钮,它调用了我的函数,但用户名和密码为空

我的错误是什么?

在此处输入图像描述

4

1 回答 1

1

您在这里混合和匹配概念。基本身份验证不仅仅意味着“使用用户名和密码”;它是一种特定的身份验证方案,授权令牌。例如,就像您可以通过发送类似的标头来使用身份验证令牌授权 API 调用一样Authorization: Bearer {token},您可以通过Authorization: Basic {base64-encode user:pass}.

你在这里做的是登录。换句话说,您可以执行此操作以返回稍后将通过Authorization: Bearer {token}. 在这里,用户名和密码值需要来自请求正文,而不是Authorization标头。

于 2019-11-07T18:27:28.743 回答