【发布时间】:2019-02-11 20:59:52
【问题描述】:
我正在尝试在 ASP Net Core 2.1 中使用 Jwt auth 和 Identity
在我的 Startup.cs 我有:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = AuthOptions.ISSUER,
ValidateAudience = true,
ValidAudience = AuthOptions.AUDIENCE,
ValidateLifetime = true,
IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
ValidateIssuerSigningKey = true,
};
});
var builder = services.AddIdentityCore<User>(options =>
{
// Password settings
...
// Lockout settings
...
// User settings
options.User.RequireUniqueEmail = true;
}).AddEntityFrameworkStores<ApplicationDbContext>();
builder = new IdentityBuilder(builder.UserType, typeof(IdentityRole), builder.Services);
然后在 SecurityService.cs 中我尝试使用此语句获取角色
var roles = await _userManager.GetRolesAsync(user);
并抛出以下异常:
NotSupportedException:存储未实现 IUserRoleStore
Microsoft.AspNetCore.Identity.UserManager.GetUserRoleStore()
我发现它是因为AddIdentityCore: 如果我使用
AddIdentity<User, IdentityRole> 反而有效,但随后 [Authorize] 无效
有没有人遇到过类似的情况,或者为什么会发生这种情况?
【问题讨论】:
-
AddIdentityCore没有注册与角色相关的东西,所以这是有道理的。当您说 [Authorize] 不起作用时,具体是什么意思? -
@KirkLarkin 和 AddIdentityCore 它让我可以访问端点,但我没有重定向到登录页面
-
只是为了确认 - 该端点正在使用 JWT 身份验证?
-
@KirkLarkin 是的,我在 startup.cs 中设置这个 - AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(...)
标签: c# asp.net-core jwt asp.net-core-identity