首页 >后端开发 >C++ >如何在 ASP.NET Core 中为 AngularJS 应用程序实现基于令牌的身份验证?

如何在 ASP.NET Core 中为 AngularJS 应用程序实现基于令牌的身份验证?

DDD
DDD原创
2024-12-27 18:53:12211浏览

How to Implement Token-Based Authentication in ASP.NET Core for an AngularJS Application?

ASP.NET Core 中基于令牌的身份验证


场景

假设您有一个 ASP.NET Core 应用程序,您希望在其中实现基于令牌的身份验证AngularJS 应用程序。 AngularJS 应用程序将向特定 URL 发出请求,并传递用户名和密码。 Web API 将授权用户并返回一个访问令牌,AngularJS 应用程序将在后续请求中使用该令牌。

如何在 ASP.NET Core 中配置基于令牌的身份验证

配置基于令牌的 ASP.NET Core Web API 应用程序身份验证:

1。定义常量

为代币受众和发行者创建常量:

const string TokenAudience = "Myself";
const string TokenIssuer = "MyProject";

2.配置服务

在 Startup.cs 文件中,将以下内容添加到ConfigureServices 方法中:

var keySecret = authenticationConfiguration["JwtSigningKey"];
var symmetricKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(keySecret));

services.AddTransient(_ => new JwtSignInHandler(symmetricKey));

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
})
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters.ValidateIssuerSigningKey = true;
        options.TokenValidationParameters.IssuerSigningKey = symmetricKey;
        options.TokenValidationParameters.ValidAudience = JwtSignInHandler.TokenAudience;
        options.TokenValidationParameters.ValidIssuer = JwtSignInHandler.TokenIssuer;
    });

3.设置身份验证

在 Startup.cs 文件中任何需要用户信息的中间件之前添加以下行:

app.UseAuthentication();

4。构建令牌

创建一个类来处理 JWT 令牌生成:

class JwtSignInHandler
{
    public const string TokenAudience = "Myself";
    public const string TokenIssuer = "MyProject";
    private readonly SymmetricSecurityKey key;

    public JwtSignInHandler(SymmetricSecurityKey symmetricKey)
    {
        this.key = symmetricKey;
    }

    public string BuildJwt(ClaimsPrincipal principal)
    {
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(
            issuer: TokenIssuer,
            audience: TokenAudience,
            claims: principal.Claims,
            expires: DateTime.Now.AddMinutes(20),
            signingCredentials: creds
        );

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
}

5.返回令牌

在要返回令牌的控制器操作中,调用 BuildJwt 方法:

[HttpPost]
public string AnonymousSignIn([FromServices] JwtSignInHandler tokenFactory)
{
    var principal = new System.Security.Claims.ClaimsPrincipal(new[]
    {
        new System.Security.Claims.ClaimsIdentity(new[]
        {
            new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Name, "Demo User")
        })
    });
    return tokenFactory.BuildJwt(principal);
}

通过以下步骤,您的 ASP.NET Core Web API应用程序将配置为使用基于令牌的身份验证,使您的 AngularJS 应用程序能够安全地访问受保护的资源。

以上是如何在 ASP.NET Core 中为 AngularJS 应用程序实现基于令牌的身份验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn