web-dev-qa-db-fra.com

L'URL de réponse Azure Active Directory ne fonctionne pas comme prévu

J'ai spécifié deux URL dans l'URL de réponse de la configuration de mon site Web Azure Active Directory. L'une pour rediriger vers mon environnement localhost lorsque j'utilise le code local et l'autre pour rediriger vers mon site Web hébergé Azure lorsque j'exécute le site Web prod Mais Azure Active Directory semble ignorer le paramètre. Il utilise uniquement l'une ou l'autre des URL, mais pas les deux. J'ai vu un lien décrivant le problème et une solution possible, mais cela n'a pas fonctionné pour moi. Le lien est:

http://samritchie.net/2013/07/17/Azure-ad-single-sign-signer-avec-multiple-environments-reply-urls/

Comment configurer Azure Active Directory pour qu'il redirige vers l'environnement approprié?

22
Yasir

Vous ne fournissez pas de détails sur votre implémentation, mais voici une solution pour chaque cas.

Vous utilisez peut-être la configuration WIF, qui est entièrement configurée dans votre web.cofing, ou vous utilisez OWIN, où la configuration se trouve dans votre fichier Config.Auth.cs. Dans les deux cas, le STS d'Azure AD utilisera uniquement l'URI de réponse par défaut, quelle que soit l'origine des appels. Vous devez définir explicitement ReplyUrl pour que Azure AD renvoie l'utilisateur à l'une des URL de réponse registered

Solution WIF

Lorsque vous utilisez WIF, votre configuration Web contient les sections suivantes:

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

ce qui est un peu incomplet! Vous pouvez ajouter une variable reply à la balise wsFederation pour indiquer à Azure AD la nouvelle URL de réponse:

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

Notez que vous ne pouvez utiliser ici que les URL de réponse registered.

Pour modifier l'attribut de réponse, vous pouvez utiliser en toute sécurité les transformations web.config comme vous le faites pour tous vos autres paramètres d'application et chaîne de connexion spécifiques au déploiement.

Solution OWIN

Lorsque vous utilisez OWIN, vous avez le fichier Startup.Auth.cs ou votre configuration d'authentification sera directement dans votre fichier Startup.cs. Cela ressemblerait à ceci:

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

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

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

Notez les paramètres de configuration pour l'authentification OpenIdConnect. Vous pouvez ajouter une propriété RedirectUri pour indiquer où rediriger l'utilisateur:

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

Vous pouvez affecter RedirectUri à un paramètre du fichier Web.Config, que vous pourrez également gérer à l'aide de transformations Web.Config.

24
astaykov

Dans le cas d'OWIN, j'ai la solution de configuration suivante

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

Donc, il utilise une redirection locale lorsque je ne construis pas pour le déploiement. Le projet est configuré pour déclarer DEPLOY pour la version que je construis pour le déploiement. De cette façon, il utilise l'URL de redirection par défaut configurée dans Azure.

0
Diceyus