2015-08-28 3 views
1

Я пытаюсь реализовать аутентификацию на нашем веб-сайте с использованием Azure AD, следуя приведенной ниже ссылке. Наш веб-сайт использует приведенный ниже стек ASP.NET, MVC5, размещенный в IIS. в основном использовать протокол OpenId Connect для проверки подлинности веб-сайта и использовать протокол oAuth2.0 для делегированного доступа для использования токена для авторизации.Аутентификация с использованием OpenId Connect для Azure AD?

https://github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet

Получение токена из Azure логики AD есть в классе Startup.Auth.cs, который вызывается из класса OwinStartup.

Когда я реализую это на нашем сайте, Startup.Auth.cs ConfigureAuth выполняется только один раз во время запуска APP и в соответствии с приведенной выше ссылкой.

Отделка классов контроллера с помощью [Авторизовать] или добавления SignIn() с проверкой подлинности запроса или нет и повторным вызовом кода аутентификации.

public void SignIn() 
    { 
     // Send an OpenID Connect sign-in request. 
     if (!Request.IsAuthenticated) 
     { 
      HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType); 
     } 
    } 

Вопрос заключается в том, что метод входа в аккаунт() не получает в нашем приложении, а также любопытно на то, что атрибуты [Авторизоваться] делает?

Я высоко ценю любое понимание этих данных. Спасибо большое заблаговременно.

ответ

1

ACS не поддерживает OpenId Connect и больше не разрабатывается - следовательно, первая часть ответа будет - то, что вы пытаетесь сделать, не поддерживается. Тем не менее, вы уверены, что имеете в виду ACS? Этот пример относится к Azure AD, который представляет собой другое предложение. Для остальной части ответа предположим, что вы ссылаетесь на Azure AD. Из вашего описания я не понимаю, в чем проблема, которую вы испытываете. ConfigureAuth необходимо выполнить только один раз, чтобы выполнить свою работу, что добавляет в конвейер обработки запросов модули (промежуточное ПО), ответственные за обработку аутентификации. Я не уверен, какой код вы имеете в виду с «Authenticate». Здесь не должно быть такого вызова - когда вы запрашиваете маршрут, украшенный [authorize], ASP.NET будет обеспечивать, чтобы вызывающий объект был аутентифицирован; если это не так, как это имеет место для первого запроса, это приводит к тому, что открытое связующее программное обеспечение для соединения генерирует запрос на вход. Метод Signin() делает практически то же самое, но без необходимости попытки доступа к ресурсу, отмеченному с помощью [authorize].

+0

Да, это Azure AD, я обновил его в вопросе. Спасибо за ответ, это помогает. – SteelBird82

+0

О «ASP.NET обеспечит проверку подлинности вызывающего» - выполняет ли он код в обработчике проверки подлинности в приложении Startup.Auth.cs app.UseOpenIdConnectAuthentication (..); Я не вижу этого выполнения при отладке кода. – SteelBird82

+0

Enforce здесь означает проверку, является ли флаг isauthenticated истинным, и начать возвращать 401 в противном случае. Как я уже сказал в ответ, инициализация происходит только один раз. Если есть код, вы подключаете уведомления, которые должны выполняться, но только тогда, когда вы получаете маркер обратно, который позже. – vibronet

0

Не используйте атрибут [Авторизовать] с контроллерами, если у вас есть явное действие SignIn().

Возможно, вы столкнулись с аутентификацией cookie и переменной Session. Проверить this link

для деталей.