URL ответа Azure Active Directory не работает должным образом
Я указал два URL-адреса в своем ответном URL-адресе конфигурации веб-сайта Azure Active Directory. Один - для перенаправления в мою среду localhost, когда я запускаю локальный код, и один - для перенаправления на мой веб-сайт Azure, когда я запускаю сайт prod. Но Active Directory Azure, похоже, игнорирует этот параметр. Он использует только один или другой URL, но не оба. Я видел ссылку, описывающую проблему и возможное решение, но она не работала для меня. Ссылка:
http://samritchie.net/2013/07/17/azure-ad-single-sign-on-with-multiple-environments-reply-urls/
Как настроить Azure Active Directory для перенаправления в соответствующую среду?
2 ответа
Вы не предоставляете подробную информацию о своей реализации, но здесь есть решение для любого случая.
Вы можете использовать конфигурацию WIF - которая полностью сконфигурирована в вашем web.cofing, или вы можете использовать OWIN, где конфигурация находится в вашем файле Config.Auth.cs. В любом случае, STS Azure AD будет использовать только 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" />
Обратите внимание, что здесь вы можете использовать только зарегистрированные ответы URL.
Чтобы изменить атрибут ответа, вы можете безопасно использовать преобразования web.config, как и для всех других настроек приложения и строки подключения.
OWIN Solution
Когда вы используете 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.
Для случая OWIN у меня есть следующее конфигурационное решение
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
#if !DEPLOY
,RedirectUri = "https://localhost:44369/"
#endif
});
Поэтому он использует локальное перенаправление, когда я не собираюсь для развертывания. Проект настроен для объявления DEPLOY для версии, которую я создаю для развертывания. Таким образом, он использует URL-адрес перенаправления по умолчанию, настроенный в Azure.