在 ASP.NET Core 中实现一个 Token-based 的身份认证实例
在 ASP.NET Core 中,我们可以使用 Token-based 的身份认证方式来保护我们的 Web 应用程序。本攻略将介绍如何在 ASP.NET Core 中实现一个 Token-based 的身份认证实例。
步骤
以下是在 ASP.NET Core 中实现一个 Token-based 的身份认证实例的步骤:
- 创建 ASP.NET Core 项目。
使用以下命令创建 ASP.NET Core 项目:
dotnet new webapi -n MyApi
在上面的命令中,我们使用 dotnet new 命令创建了一个名为 MyApi 的 ASP.NET Core 项目。
- 安装 Microsoft.AspNetCore.Authentication.JwtBearer。
使用以下命令安装 Microsoft.AspNetCore.Authentication.JwtBearer:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
- 配置身份认证。
在 Startup.cs 文件中添加以下代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "MyApi",
ValidAudience = "MyApi",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MySuperSecretKey@123"))
};
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
在上面的代码中,我们使用 AddAuthentication 方法添加身份认证服务,并使用 AddJwtBearer 方法添加 JWT Bearer 认证。我们还配置了 TokenValidationParameters,用于验证 JWT Token 的有效性。在 Configure 方法中,我们使用 UseAuthentication 和 UseAuthorization 方法启用身份认证和授权。
- 创建 Token。
在控制器中添加以下代码:
[HttpPost("token")]
public IActionResult CreateToken()
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, "1234567890"),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MySuperSecretKey@123"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "MyApi",
audience: "MyApi",
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
在上面的代码中,我们创建了一个名为 CreateToken 的方法,用于创建 JWT Token。我们使用 JwtSecurityToken 类创建了一个 JWT Token,并使用 SigningCredentials 类设置了签名密钥。最后,我们使用 JwtSecurityTokenHandler 类将 JWT Token 转换为字符串,并返回给客户端。
- 添加授权。
在控制器中添加以下代码:
[Authorize]
[HttpGet("values")]
public IActionResult GetValues()
{
return Ok(new[] { "value1", "value2" });
}
在上面的代码中,我们使用 Authorize 属性标记了 GetValues 方法,表示该方法需要授权才能访问。
- 测试身份认证。
使用以下命令测试身份认证:
curl -X POST http://localhost:5000/token
在上面的命令中,我们使用 curl 命令创建了一个 JWT Token。
使用以下命令测试授权:
curl -H "Authorization: Bearer <token>" http://localhost:5000/values
在上面的命令中,我们使用 curl 命令测试了授权功能。
示例说明
以下是两个示例,演示如何在 ASP.NET Core 中实现一个 Token-based 的身份认证实例。
示例1:配置身份认证
以下是在 Startup.cs 文件中配置身份认证的示例:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "MyApi",
ValidAudience = "MyApi",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MySuperSecretKey@123"))
};
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
在上面的代码中,我们使用 AddAuthentication 方法添加身份认证服务,并使用 AddJwtBearer 方法添加 JWT Bearer 认证。我们还配置了 TokenValidationParameters,用于验证 JWT Token 的有效性。在 Configure 方法中,我们使用 UseAuthentication 和 UseAuthorization 方法启用身份认证和授权。
示例2:创建 Token
以下是在控制器中创建 Token 的示例:
[HttpPost("token")]
public IActionResult CreateToken()
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, "1234567890"),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MySuperSecretKey@123"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "MyApi",
audience: "MyApi",
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
在上面的代码中,我们创建了一个名为 CreateToken 的方法,用于创建 JWT Token。我们使用 JwtSecurityToken 类创建了一个 JWT Token,并使用 SigningCredentials 类设置了签名密钥。最后,我们使用 JwtSecurityTokenHandler 类将 JWT Token 转换为字符串,并返回给客户端。
结论
本攻略介绍了如何在 ASP.NET Core 中实现一个 Token-based 的身份认证实例。我们提供了详细的步骤和示例说明,以帮助您快速实现 Token-based 的身份认证。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在ASP.NET Core中实现一个Token base的身份认证实例 - Python技术站