我有一个带有 Blazor 客户端和 ASP.NET Core 服务器的 Blazor WASM 项目。我可以使用以下代码对用户/密码进行身份验证:
services
.AddDefaultIdentity<ApplicationUser>(
options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services
.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services
.AddAuthentication()
.AddIdentityServerJwt();
services.AddTransient<IProfileService, ProfileService>();
services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireClaim("scope", "api1");
});
});
当我添加以下代码时,我可以从控制台客户端成功使用 clientcredentials 进行身份验证。但随后 Blazor 客户端用户/密码身份验证将停止工作。
...
services
.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>()
+.AddInMemoryApiScopes(Config.ApiScopes)
+.AddClientStore<ClientStore>()
+.AddDeveloperSigningCredential();
services
.AddAuthentication()
.AddIdentityServerJwt();
+services
+ .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
+ .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
+ {
+ options.Authority = "https://localhost:44311";
+ options.TokenValidationParameters = new TokenValidationParameters
+ {
+ ValidateAudience = false,
+ };
+ });
...
在浏览器中尝试在 Blazor 客户端中进行身份验证时,控制台会打印:
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
Authorization failed. These requirements were not met:
DenyAnonymousAuthorizationRequirement: Requires an authenticated user.
我已经尝试了很多,但无法使两者一起工作。不知何故,此配置似乎需要对所有内容进行身份验证,甚至是标记为“AllowAnonymous”的页面/控制器。因此,当我尝试进行身份验证时,它会给出一个错误,告诉我必须对用户进行身份验证:DenyAnonymousAuthorizationRequirement。策略“ApiScope”仅适用于 clientcredentials 客户端,不适用于 Blazor 客户端。如果删除, RequireAuthenticatedUser 调用不会产生任何影响,同样的错误。
任何帮助表示赞赏。