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>
Я надеюсь, что этот пост был полезным.