我想在一个应用程序中使用 Azure AD 和 Azure B2C。我注册了两个工作正常的身份验证方案。
现在我想允许用户通过单击“使用 AD 登录”或“使用 B2C 登录”按钮来决定应使用哪种方案。
我可以通过使用链接MicrosoftIdentity/Account/SignIn
为 AD 执行此操作。为此,有必要使用services.AddControllersWithViews().AddMicrosoftIdentityUI()
那么,我如何获得像上面的 B2C 链接?
这是我的代码:
public static void AddAzureADAuthenticationApp(this IServiceCollection services, IConfigurationSection configuration)
{
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(options =>
{
configuration.Bind(options);
options.Events.OnTokenValidated = async context =>
{
await AuthorizationHelper.ValidateAADAppToken(context);
};
})
.EnableTokenAcquisitionToCallDownstreamApi().AddInMemoryTokenCaches();
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder(OpenIdConnectDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.AddRequirements(new AzureADAuthorizationRequirement()).Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.AddMicrosoftIdentityUI();
services.AddAuthorization(config =>
{
var policy = new AuthorizationPolicyBuilder(OpenIdConnectDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.AddRequirements(new AzureADAuthorizationRequirement()).Build();
config.AddPolicy(Constants.PolicyInternalUsers, policy);
});
}
public static void AddAzureB2CAuthenticationApp(this IServiceCollection services, IConfigurationSection configuration, bool RequireAccountNum = false)
{
services.AddAuthentication()
.AddMicrosoftIdentityWebApp(options =>
{
configuration.Bind(options);
options.SignInScheme = Constants.B2CAuthenticationScheme;
options.ResponseType = "code id_token";
options.Scope.Clear();
options.Scope.Add("https://graph.microsoft.com/openid");
options.Events.OnTokenValidated = async context =>
{
await AuthorizationHelper.ValidateB2CAppToken(context, RequireAccountNum);
};
}, openIdConnectScheme: Constants.B2CAuthenticationScheme, cookieScheme: Constants.B2CCookieScheme)
.EnableTokenAcquisitionToCallDownstreamApi().AddInMemoryTokenCaches();
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder(FischerLib.Extensions.Constants.B2CAuthenticationScheme)
.RequireAuthenticatedUser()
.AddRequirements(new AzureB2CAuthorizationRequirement(RequireAccountNum)).Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.AddMicrosoftIdentityUI();
services.AddAuthorization(config =>
{
var policy = new AuthorizationPolicyBuilder(FischerLib.Extensions.Constants.B2CAuthenticationScheme)
.RequireAuthenticatedUser()
.AddRequirements(new AzureB2CAuthorizationRequirement(RequireAccountNum)).Build();
config.AddPolicy(Constants.PolicyExternalUsers, policy);
});
}
目前,我正在使用两个具有授权属性的控制器。访问这些控制器将用户重定向到登录。
但这不是我想要使用的方式。在上面的代码是库的一部分之后,我想避免在每个项目中使用控制器。
我知道有一个属性LoginPath
如果我使用不同的方案,如 cookie,但我不能在AddMicrosoftIdentityWebApp(...)
中设置此属性
非常感谢你!
马库斯
请在Building a Web Application that Supports both Azure AD and Azure AD B2C - MikaBerglund.com查看此博客
它适用于如何启用 Azure AD 和 Azure AD B2C 之间的切换,只需更改配置,即app settings.json
文件,其中权限,clientId 更改。
控制器操作需要在需要时路由到选定的身份验证方案。
您可以为同一个引发support request。
参考:github ref
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(50条)