web-dev-qa-db-de.com

Azure Active Directory-Antwort-URL funktioniert nicht wie erwartet

Ich habe in meiner Antwort-URL für die Konfiguration der Azure Active Directory-Website zwei URLs angegeben. Umleitung zu meiner localhost-Umgebung, wenn lokaler Code ausgeführt wird, und Umleitung zu meiner von Azure gehosteten Website, wenn ich die prod-Website betreibe. Azure Active Directory scheint jedoch die Einstellung zu ignorieren. Es verwendet nur die eine oder die andere URL, aber nicht beide. Ich habe einen Link gesehen, der das Problem beschreibt, und eine mögliche Lösung, die für mich nicht funktionierte. Der Link lautet:

http://samritchie.net/2013/07/17/Azure-ad-single-sign-on-mit-multiple-environments-reply-urply/

Wie richte ich Azure Active Directory für die Umleitung in die entsprechende Umgebung ein?

22
Yasir

Sie geben keine Details zu Ihrer Implementierung an, aber hier ist eine Lösung für jeden Fall.

Möglicherweise verwenden Sie WIF-Konfiguration - dies ist vollständig in Ihrem web.cofing konfiguriert, oder Sie verwenden OWIN, wobei die Konfiguration in Ihrer Datei Config.Auth.cs enthalten ist. In beiden Fällen verwendet der STS von Azure AD nur den Standardantwort-URI, unabhängig davon, woher die Anrufe kommen. Sie müssen ReplyUrl explizit so einstellen, dass Azure AD angewiesen wird, den Benutzer zu einer der URLs registered reply zurückzukehren. 

WIF-Lösung

Wenn Sie WIF verwenden, enthält Ihre Webkonfiguration den folgenden Abschnitt:

  <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>

das ist ein bisschen unvollständig! Sie können dem Tag reply eine Variable wsFederation hinzufügen, um Azure AD die neue Antwort-URL anzuweisen:

  <wsFederation passiveRedirectEnabled="true" 
                issuer="https://login.windows.net/yourtenant.com/wsfed" 
                realm="https://yourtenant.com/WebSingleTenant" 
                reply="http://any_registered_url/"
                requireHttps="true" />

Beachten Sie, dass Sie hier nur eine registrierte Antwort-URL verwenden können.

Um das Antwortattribut zu ändern, können Sie die web.config-Umwandlungen wie alle anderen implementierungsspezifischen App-Einstellungen und Verbindungszeichenfolgen verwenden.

OWIN-Lösung

Wenn Sie OWIN verwenden, haben Sie eine Startup.Auth.cs-Datei, oder Ihre Authentifizierungskonfiguration wird direkt in Ihre Startup.cs-Datei übernommen. Es würde ungefähr so ​​aussehen:

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.
            AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri
            });
    }

Beachten Sie die Konfigurationseinstellungen für die OpenIdConnect-Authentifizierung. Sie können eine RedirectUri -Eigenschaft hinzufügen, um anzugeben, wohin der Benutzer umgeleitet werden soll:

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                RedirectUri = "any_registered_redirect_uri"
            });

Sie können RedirectUri einer Einstellung in der Datei Web.Config zuweisen, die Sie auch mit Transformationen von Web.Config verarbeiten können.

24
astaykov

Für den Fall von OWIN habe ich folgende Konfigurationslösung

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

Daher wird eine lokale Weiterleitung verwendet, wenn ich nicht für die Bereitstellung aufbaue. Das Projekt ist so konfiguriert, dass DEPLOY für die Version angegeben wird, die für die Bereitstellung erstellt wird. Auf diese Weise wird die in Azure konfigurierte Standard-Weiterleitungs-URL verwendet.

0
Diceyus