Azure AD с несколькими URL-адресами для ответов перенаправляет на неправильный
У меня есть приложение, которое использует AAD с WS Federation. В моем приложении AAD настроено несколько URL-адресов для ответов. Мое приложение ранее заставляло всех пользователей входить в систему, и перенаправление работало корректно во всех средах. Мне пришлось разрешить неаутентифицированным пользователям доступ к моему сайту, и после внесения необходимых изменений приложение начало перенаправлять меня на произвольный URL-адрес ответа после входа в систему.
Вот изменения кода:
Web.config
<system.web>
<authorization>
<allow users="*" />
</authorization>
...
</system.web>
AccountController.cs
public ActionResult SignIn()
{
WsFederationConfiguration config = FederatedAuthentication.FederationConfiguration.WsFederationConfiguration;
string callbackUrl = Url.Action("Index", "Home", routeValues: null, protocol: Request.Url.Scheme);
SignInRequestMessage signinMessage = new SignInRequestMessage(new Uri(config.Issuer), callbackUrl);
signinMessage.SetParameter("wtrealm", IdentityConfig.Realm ?? config.Realm);
return new RedirectResult(signinMessage.WriteQueryString());
}
У меня также есть URL ответа, указанный в моих преобразованиях Web.config в двух местах:
В appSettings <add key="ida:RedirectURI" value="..." />
который используется в моем Global.asax.cs в WSFederationAuthenticationModule_RedirectingToIdentityProvider
метод для установки e.SignInRequestMessage.Reply
,
И в
<system.identityModel.services>
<federationConfiguration>
<wsFederation
passiveRedirectEnabled="true"
reply="..." />
</federationConfiguration>
</system.identityModel.services>
Обратите внимание, что существует связанный вопрос SO, который не является таким подробным и не получил ответа. Ответный URL Azure Active Directory не работает должным образом.
1 ответ
Моя проблема была в методе SignIn, а именно в этой строке:
return new RedirectResult(signinMessage.WriteQueryString());
что нужно было изменить на это:
return new RedirectResult(signInRequest.RequestUrl.ToString());
Пожалуйста, смотрите мой блог с полным примером кода:
Частичная проверка подлинности в Azure AD с использованием WS Federation