使用 JWT 令牌授权 - 如何自动获得授权

Authorazation with JWT Token - How to get Authorized Automatically

我在获取用户授权时遇到问题。

我正在制作一个网站 Api 并且在登录方法所在的控制器中,它创建了一个令牌(JWT 令牌/Bearer 令牌),但我不知道如何放置用户 who登录自动授权。

“手动”并且大摇大摆我有以下内容,即登录后我有令牌并在一个按钮中(AddSwaggerGen(options => { options.AddSecurityDefinition(“oauth2”,new Open ApiSecurityScheme) 放置单词 bearer + ' ' + token 我已经获得授权但目前我正在尝试用普通 html + js 替换 swagger。(我通过获取调用方法)并按下登录按钮他必须尽快进行身份验证和授权。

我发送我的项目代码:

[HttpPost("login")]
        public async Task<ActionResult<string>> Login(LoginModel request)
        {
          //Here i have code who checks if is a valid user

            string token = CreateToken(user); //creates a token giving roles, keys, creds, 
                                                put in a var token and do a jwtsecurity

            var refreshToken = GenerateRefreshToken(); //this is useful for refreshTokens 
            
            //check if string token is valid
            if (!ValidateToken(token))
            {
                return BadRequest("Check if is a valid token!");
            }
            
            //this method is just to put the refresh token with the user
            SetRefreshToken(refreshToken);

            //here i just have code who updates the database refresh token

            //THE REAL PROBLEM (this is not working)
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization = new 
                AuthenticationHeaderValue("Bearer", token);
            }
            
            // Also I try do just this line but it gives me a error in the httpClient not 
            being recognize
            httpClient.DefaultRequestHeaders.Authorization = new 
            AuthenticationHeaderValue("Bearer", token);

            return Ok(token);
        }

有谁知道如何替换我必须正确执行自动授权的代码?

任何常识性的回答总是受欢迎的,如果我的英语不是最好的,抱歉

我认为您遇到的问题是您混淆了身份验证和授权的概念,正如 ASP.NET 核心文档 here:

所解释的那样

Authentication is the process of determining a user's identity. Authorization is the process of determining whether a user has access to a resource.

这意味着两个过程不能一起完成。

正如您在此 JWT Auth flow 上看到的那样,您必须首先对用户进行身份验证,因此您的 API 可以为该用户发布 JWT 并将其发送回您的 API的 consumer/client 申请。

您的 consumer/client 应用程序现在负责存储颁发的 JWT 令牌(例如网络应用程序的本地存储)并将其附加到每个需要它的请求的 HTTP 授权 header为用户授权,您的 API 仅负责验证 JWT 令牌。

要使用 [Authorize] 属性,您必须在启动文件中添加以下配置。

// Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // JWT validation configuration
     services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
     {
          var symmetricKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(symmetricKeyValue));

          options.TokenValidationParameters = new TokenValidationParameters
          {
                IssuerSigningKey = symmetricKey,
                ClockSkew = TimeSpan.Zero,
                ValidIssuer = issuerValue,
                ValidAudience = audienceValue,
                ValidateIssuerSigningKey = true,
                ValidateLifetime = true,
                ValidateIssuer = true,
                ValidateAudience = true,
          };
      });

      // Enables [Authorize] attribute
      services.AddAuthorization();

      // API controllers or your endpoint configuration
      services.AddControllers();
}

注意:services.AddAuthentication() 上的所有值都可以根据您的需要进行配置。