从 .NET Core 3 移植到 .NET Core 5 身份验证,我需要用 services.AddMicrosoftIdentityWebAppAuthentication 或其他相关的 MicrosoftIdentity 扩展替换 services.AddSignIn(已弃用)。我需要支持 API 访问的 OpenId 用户登录和 Bearer 令牌策略。这些都与 services.AddSignIn 一起使用,但我无法让这种组合与新的 MicrosftIdentity 扩展一起使用。
我有一个使用 OpenId 登录到 Azure AD B2C 的 .Net Core Blazor 服务器。这可以正常工作:
services.AddMicrosoftIdentityWebAppAuthentication(
configuration,
aadB2CConfigName,
OpenIdConnectDefaults.AuthenticationScheme,
CookieAuthenticationDefaults.AuthenticationScheme,
true);
但是当我直接在它之后添加承载令牌处理时,如下所示,它会覆盖 OpenId,因此只有承载 API 有效(反之亦然):
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(
options =>
{
configuration.Bind("AzureAd", options);
options.ForwardDefaultSelector = ctx =>
ctx.Request.Path.StartsWithSegments("/api", System.StringComparison.InvariantCulture)
? JwtBearerDefaults.AuthenticationScheme
: null;
options.Authority = configuration["AzureAd:Authority"];
options.TokenValidationParameters.NameClaimType = "name";
options.TokenValidationParameters.RoleClaimType = "roles";
}, options =>
{
configuration.Bind(aadB2CConfigName, options);
});
为了完整起见,其次是(在 .net core 3 中运行良好)
services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
services.AddAuthorization(options =>
{
options.AddPolicy("Tst1AuthPolicy", policy => policy.RequireRole("Tst1AppRole"));
options.AddPolicy("Tst2AuthPolicy", policy => policy.RequireRole("Tst2AppRole"));
});
扩展方法的链接似乎不像 AddSignIn 那样工作。如何在新的 .net core 5 上下文中使这两项再次并行工作?ie OpenId 作为默认值,当 WebApi (/api) 被命中时使用 Bearer Tokens。