我在Azure Active Directory网站配置回复URL中指定了两个URL。一个是在我运行本地代码时重定向到我的localhost环境,另一个是在我运行prod网站时重定向到我的Azure托管网站。但Azure Active目录似乎忽略了该设置。它只使用一个或另一个URL,但不能同时使用两者。我看到了一个描述问题的链接和一个可能的解决方案,但它对我没有用。链接是:
http://samritchie.net/2013/07/17/azure-ad-single-sign-on-with-multiple-environments-reply-urls/
如何设置Azure Active Directory以重定向到适当的环境?
答案 0 :(得分:24)
您没有提供有关您的实施的详细信息,但这是针对任何情况的解决方案。
您可能正在使用WIF配置 - 这完全是在您的web.cofing中配置,或者您可能正在使用OWIN,其中配置位于Config.Auth.cs文件中。无论哪种方式,Azure AD的STS将仅使用默认回复URI,无论呼叫来自何处。您必须明确设置ReplyUrl以指示Azure AD将用户返回到已注册的回复URL之一。
WIF解决方案
使用WIF时,您的网络配置包含以下部分:
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="true" />
<wsFederation passiveRedirectEnabled="true"
issuer="https://login.windows.net/yourtenant.com/wsfed"
realm="https://yourtenant.com/WebSingleTenant"
requireHttps="true" />
</federationConfiguration>
</system.identityModel.services>
这有点不完整!您可以在reply
标记中添加wsFederation
,以指示Azure AD获取新的回复网址:
<wsFederation passiveRedirectEnabled="true"
issuer="https://login.windows.net/yourtenant.com/wsfed"
realm="https://yourtenant.com/WebSingleTenant"
reply="http://any_registered_url/"
requireHttps="true" />
请注意,您只能使用已注册的回复网址。
要修改回复属性,您可以安全地使用web.config转换,就像对所有其他特定于部署的应用程序设置和连接字符串一样。
OWIN解决方案
当您使用OWIN时,您将拥有Startup.Auth.cs
个文件,或者您的身份验证配置将直接进入您的Startup.cs
文件。它看起来像下面这样:
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.
AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
});
}
请注意OpenIdConnect身份验证的配置设置。您可以添加RedirectUri
属性以指示将用户重定向到的位置:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = "any_registered_redirect_uri"
});
您可以将RedirectUri指定给Web.Config文件中的设置,您也可以使用Web.Config转换处理该设置。
答案 1 :(得分:0)
对于OWIN的情况,我有以下配置解决方案
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
#if !DEPLOY
,RedirectUri = "https://localhost:44369/"
#endif
});
因此,当我不构建部署时,它会使用本地重定向。该项目配置为为我正在构建的部署版本声明DEPLOY。这样,它使用Azure中配置的默认重定向URL。