C# 如何为多租户Azure AD请求设置域提示?
当使用OpenID Connect使用Azure AD进行身份验证时,可以在身份验证请求中包含C# 如何为多租户Azure AD请求设置域提示?,c#,azure-active-directory,C#,Azure Active Directory,当使用OpenID Connect使用Azure AD进行身份验证时,可以在身份验证请求中包含域提示参数,以将用户重定向到其品牌Azure登录页面(类似于使用whr——例如,请参阅和之间的区别) 如果为单个租户提供服务,则可以很容易地使用以下内容进行设置: app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = clientId,
域提示
参数,以将用户重定向到其品牌Azure登录页面(类似于使用whr
——例如,请参阅和之间的区别)
如果为单个租户提供服务,则可以很容易地使用以下内容进行设置:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications()
{
RedirectToIdentityProvider = (context) =>
{
context.ProtocolMessage.DomainHint = "mydomain.com";
return Task.FromResult(0);
},
}
})
但是,我正在开发一个多租户应用程序,该应用程序要求用户发送电子邮件,然后根据配置设置,将允许用户使用本地密码登录,或者将用户重定向到Azure进行身份验证。这是通过以下方式实现的:
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, "AzureAd");
由于我在应用程序启动时不知道
DomainHint
(它会根据用户的组织而变化),是否有办法将DomainHint
参数作为Challenge
方法属性或类似属性的一部分传递给用户?当然!有关将应用程序中的上下文传递到登录消息生成管道的方法,请参阅。您可以很容易地调整示例(表示二进制同意选项)以指定域提示、登录提示或您需要的任何组合。在我问了这个问题后不久,我开始采用与@vibronet发布的答案类似的方法,对于在这里发布解决方案后出现的人来说也是如此
上面对Challenge()
的调用中的properties
对象(类型为AuthenticationProperties
)的一部分是一个Dictionary
对象,名为Dictionary
(幸运的是)。在调用Challenge()
之前,已在以下位置设置域提示:
properties.Dictionary["DomainHint"] = domainHint;
正如@vibronet所建议的,然后可以通过在启动时更改app.UserOpenIdConnectAuthentication()
调用来访问管道。此呼叫现在看起来像:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
...
Notifications = new OpenIdConnectAuthenticationNotifications
{
...
RedirectToIdentityProvider = notification =>
{
var dict = notification.OwinContext.Authentication.AuthenticationResponseChallenge.Properties.Dictionary;
if (dict.ContainsKey("DomainHint"))
{
notification.ProtocolMessage.DomainHint = dict["DomainHint"];
}
return Task.FromResult(0);
}
}
}
);
希望这有帮助