使用IdentityServer4对API进行自定义JWT身份验证

时间:2020-01-04 17:35:45

标签: authentication asp.net-web-api jwt identityserver4

我有一个具有自定义身份验证(用户/角色/权限等)的旧式ASP.Net MVC应用程序和一个MySQL数据库。 我现在正在开发一个简单的ASP.NET Core 3.1 API,该API需要连接到同一数据库以在外部插入一些数据(以后将由旧版应用程序使用)。 API用户将从MVC系统添加到数据库,并且身份验证需要使用JWT令牌。

我宁愿不复制API中的所有身份验证逻辑(这很复杂),所以我想向MVC应用程序添加一个API端点以重用已经存在的身份验证逻辑并返回JWT / refresh令牌。这应该很简单。

我的问题是在API中使用此方法的最佳方法是什么?我应该只使用代码段波纹管之类的东西,然后从API的身份验证端点调用MVC应用程序中的身份验证端点,还是使用IdentityServer的合适人选?

services.AddAuthentication(x =>
{
    x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(x =>
{
    x.RequireHttpsMetadata = false;
    x.SaveToken = true;
    x.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(key),
        ValidateIssuer = false,
        ValidateAudience = false
    };
});

1 个答案:

答案 0 :(得分:0)

它基于您的应用程序业务逻辑。使用JWT是为应用程序提供无状态身份验证和授权的简单方法。但是,如果要使用多个服务器和客户端来实现应用程序,最好使用IdentityServer之类的工具,该工具为集中式身份管理和单一登录工具提供解决方案。