.NET平台下的统一身份认证系统演示
2024-12-22 18:06
在当今的互联网应用中,统一身份认证(Single Sign-On, SSO)已经成为确保用户安全访问多个服务的关键技术。本文将展示如何在.NET平台上实现这一功能,通过代码演示具体的实施步骤。
首先,我们需要创建一个.NET Core Web API项目作为我们的认证服务器。这个API将负责处理用户的登录请求并返回JWT(JSON Web Token)给客户端。以下是一个简单的认证控制器代码示例:
using Microsoft.AspNetCore.Mvc; using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; [Route("api/[controller]")] [ApiController] public class AuthController : ControllerBase { private readonly string _secretKey = "your_secret_key_here"; [HttpPost("login")] public IActionResult Login([FromBody] UserCredentials credentials) { if (credentials.Username == "admin" && credentials.Password == "password") { var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, "admin"), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "your_issuer", audience: "your_audience", claims: claims, expires: DateTime.Now.AddMinutes(30), signingCredentials: creds); return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) }); } else { return Unauthorized(); } } } public class UserCredentials { public string Username { get; set; } public string Password { get; set; } }
接下来,我们需要创建一个.NET Core MVC应用程序作为资源服务器。在这个应用中,我们将使用JWT来保护我们的API端点。首先,安装`Microsoft.AspNetCore.Authentication.JwtBearer`包,并在Startup.cs中配置JWT认证:
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "your_issuer", ValidAudience = "your_audience", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key_here")) }; }); services.AddControllersWithViews(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }
最后,在需要保护的控制器或操作方法上添加`[Authorize]`属性,即可启用基于JWT的身份验证。
以上就是在.NET平台上实现统一身份认证系统的简单示例。通过这些代码,我们可以看到如何创建一个认证服务器以及如何在资源服务器上配置JWT认证。
]]>
本站知识库部分内容及素材来源于互联网,如有侵权,联系必删!
标签:统一身份认证