Azure Active Directory回复URL未按预期工作

时间:2015-05-21 21:44:37

标签: c# azure azure-active-directory

我在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以重定向到适当的环境?

2 个答案:

答案 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。