WsFederation Authentication loop loop

Я испытываю проблему с циклом входа в систему при использовании WsFederation Authentication в моем веб-приложении MVC. Я использовал Visual Studio, чтобы создать леса веб-приложения и настроить WsFederation в Startup.cs, Который генерирует следующий блок кода:

public class Startup
{
    private static string realm = ConfigurationManager.AppSettings["ida:Wtrealm"];
    private static string adfsMetadata = ConfigurationManager.AppSettings["ida:ADFSMetadata"];

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

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
        {
            Wtrealm = realm,
            MetadataAddress = adfsMetadata
        });
    }
}

Веб-приложение размещено в Azure, а ADFS находится в локальной сети.

На некоторых клиентах при попытке входа в систему страница входа в систему зацикливается, запрашивая новые токены, вызывая следующее исключение на сервере ADFS:

Сведения об исключении: Microsoft.IdentityServer.Web.InvalidRequestException: MSIS7042: в том же сеансе браузера клиента было выполнено "6" запросов за последние "7" секунд. Свяжитесь со своим администратором для деталей.

Я прочитал много статей о Stackru и посмотрел на различные примеры, предоставленные ребятами, которые написали IdentityServer, и я пробовал различные варианты конфигурации, и я не могу выделить проблему в определенной области.

Из того, что я прочитал, это общая проблема с промежуточным программным обеспечением OWIN, теряющим контекст объекта, и в результате токен "теряется".

Я пытался реализовать некоторые примеры кода, которые другие предоставили в Stackru, но, похоже, я не могу найти решение, которое решает мою проблему или, возможно, неправильно реализовал код.

Есть идеи?

1 ответ

Решение

Причиной проблемы были URL-адреса запросов и ответов, где они не совпадали. Т.е. когда пользователь вводит URL-адрес веб-сайта и не использует префикс HTTPS, происходит цикл перенаправления.

Причина была скрыта, потому что пользователь сразу перенаправляется в ADFS, если он не прошел проверку подлинности или авторизацию.

Все, что мне нужно было сделать, - убедиться, что все пользовательские запросы перенаправлены обратно на URL-адрес HTTPS и что HTTP-привязка удалена.(Либо, либо сработало бы просто отлично)

Это код, который я использовал, чтобы убедиться, что все запросы перенаправляются на https.

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to https">
          <match url="(.*)"/>
          <conditions>
            <add input="{HTTPS}" pattern="Off"/>
            <add input="{REQUEST_METHOD}" pattern="^get$|^head$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

Я надеюсь, что этот пост был полезным.

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