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

Другие вопросы по тегам