2016-06-17 7 views
2

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

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 
     }); 
    } 
} 

Веб-приложение размещается в лазури и ADFS находится на территории.

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

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

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

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

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

Любые идеи?

+0

Я смог воспроизвести проблему в своей локальной среде, но я не ближе к пониманию причины проблемы. Я добавил свой IP как привязку к моей конфигурации IIS Express, так что я могу удаленно получить доступ к веб-сайту для отладки. Это позволило повторить цикл. Когда я обращаюсь к сайту с «192.168.1.20:44341/»; логин работает. Однако, когда я обращаюсь к сайту с "localhost: 44341 /"; происходит цикл входа. IP-адрес конечной точки доверия доверяющей стороны - это мой IP-адрес. –

ответ

3

Причиной проблемы были 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> 

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

 Смежные вопросы

  • Нет связанных вопросов^_^