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

如何在 AngularJS 应用程序的 ASP.NET Core Web API 中配置基于令牌的身份验证?

Linda Hamilton
发布: 2024-12-30 14:23:13
原创
403 人浏览过

How to Configure Token-Based Authentication in ASP.NET Core Web API for AngularJS Applications?

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

挑战

在 ASP.NET Core 应用程序中,实现基于令牌的身份验证可以是一个挑战。传统的示例通常围绕 cookie 身份验证或外部身份验证提供程序。但是,在处理 AngularJS 应用程序从 /token 端点请求令牌并传递用户名和密码的场景时,了解如何相应配置 WebApi 应用程序至关重要。

身份验证设置

要在 ASP.NET Core WebApi 中配置基于令牌的身份验证,请按照以下步骤操作:

  1. 定义令牌属性:首先为令牌参数创建常量,包括令牌受众和发行者。
const string TokenAudience = "Myself";
const string TokenIssuer = "MyProject";
登录后复制
  1. 配置 DI 服务:

    • 在你的Startup.cs的ConfigureServices方法中,添加依赖注入JwtSignInHandler 类。
    • 将身份验证配置为默认为 JWT 并设置令牌验证参数。
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;
    });
登录后复制
  1. 启用身份验证中间件:在请求管道中任何需要用户的中间件之前添加 UseAuthentication 中间件
app.UseAuthentication();
登录后复制
  1. 定义授权策略(可选):您可以选择定义一个 AuthorizationPolicy 来限制对基于不记名令牌的控制器和操作的访问。
services.AddAuthorization(auth =>
{
    auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
        .AddAuthenticationTypes(JwtBearerDefaults.AuthenticationType)
        .RequireAuthenticatedUser().Build());
});
登录后复制
  1. 构建JWT:创建用于令牌生成的 JwtSignInHandler 类。
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);
    }
}
登录后复制
  1. 在控制器中实现令牌生成:在控制器操作中,使用 JwtSignInHandler 来生成一个令牌。
[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);
}
登录后复制
  1. Jwt 测试:获取令牌并使用配置文件中的密钥验证其签名。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板