【问题标题】:Azure Active Directory Reply URL not working as expectedAzure Active Directory 回复 URL 未按预期工作
【发布时间】:2015-05-21 21:44:37
【问题描述】:

我在 Azure Active Directory 网站配置回复 URL 中指定了两个 URL。一个在我运行本地代码时重定向到我的 localhost 环境,一个在我运行 prod 网站时重定向到我的 Azure 托管网站。但 Azure Active Directory 似乎忽略了该设置。它只使用一个或另一个 URL,但不能同时使用两者。我看到了一个描述问题和可能解决方案的链接,但它对我不起作用。链接是:

http://samritchie.net/2013/07/17/azure-ad-single-sign-on-with-multiple-environments-reply-urls/

如何设置 Azure Active Directory 以重定向到适当的环境?

【问题讨论】:

  • 您是否使用 OWIN 进行身份验证?
  • 我不确定您的确切配置是什么,将特定的 replyUrl 添加到 web.config 转换会有所帮助。请看文末配置sn-pdo4urka.com/…

标签: c# azure azure-active-directory


【解决方案1】:

您没有提供有关您的实施的详细信息,但这里有一个适用于任何情况的解决方案。

您可能正在使用 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 获取新的回复 URL:

  <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 转换来处理。

【讨论】:

  • 这个答案与下面的答案相结合使其工作。
【解决方案2】:

对于OWIN的情况我有如下配置方案

            app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri
                #if !DEPLOY
                ,RedirectUri = "https://localhost:44369/"
                #endif
            });

所以当我不是为部署而构建时,它使用本地重定向。该项目配置为为我为部署而构建的版本声明 DEPLOY。这样,它使用 Azure 中配置的默认重定向 URL。

【讨论】:

  • 这真是一个很棒的答案!谢谢!
猜你喜欢
  • 2018-10-14
  • 1970-01-01
  • 2018-10-25
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多