使用 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()
上的所有值都可以根据您的需要进行配置。
我在获取用户授权时遇到问题。
我正在制作一个网站 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()
上的所有值都可以根据您的需要进行配置。