Не удается выполнить аутентификацию Azure ACS в приложениях MVC

У меня есть приложение MVC 3, которое я пытаюсь интегрировать с поставщиками удостоверений ACS, размещенными в Azure. Я следил за учебниками, но они, похоже, не работают для меня при использовании ASP.NET MVC.

По сути, когда я нажимаю Представление, которое я пометил [Authorize], пользователь перенаправляется на страницу входа, размещенную в Azure, со списком поставщиков удостоверений. Я выбираю провайдера (в данном случае Live) и вхожу в систему. На данный момент все работает так, как я и ожидал. После успешной аутентификации появляется (визуально), что меня не перенаправляют обратно в приложение, вместо этого я возвращаюсь на страницу поставщиков удостоверений. При просмотре этого в Fiddler кажется, что он действительно возвращается, но затем начинает цикл заново (Код состояния HTTP 302).

Может кто-нибудь объяснить, что может быть причиной этого?

На портале Azure у меня есть следующие URL-адреса, настроенные для моего приложения проверяющей стороны.

  • Область: http://localhost:7777/
  • URL возврата: http: //localhost:7777/ (я также пробовал http: //localhost:7777/Home/About)
  • Во всех остальных случаях у меня настройки по умолчанию

URL-адреса соответствуют тому, что указано в Web.config (включая косую черту в конце).

Есть только один контроллер со следующим:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [Authorize]
    public ActionResult About()
    {
        Response.Write("Claims Received from ACS:");
        ClaimsIdentity ci = Thread.CurrentPrincipal.Identity as ClaimsIdentity; foreach (Claim c in ci.Claims)
        {
            Response.Write("Type: " + c.ClaimType + "- Value: " + c.Value + "");
        }

        return View();
    }
}

Примечание. Это совершенно новый проект, созданный для работы с этой интеграцией. Все пакеты и соответствующие SDK обновлены.


person JoeGeeky    schedule 01.07.2012    source источник
comment
Если вы все еще сталкиваетесь с той же проблемой, я хотел бы посмотреть, как выглядит ваш файл web.config.   -  person Rytmis    schedule 21.11.2012


Ответы (2)


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

Пожалуйста, проверьте, правильно ли вы настроили логику авторизации. Например, если вы используете авторизацию на основе ролей, необходимо настроить ACS для создания правила, возвращающего роль. Вы также можете использовать пользовательскую авторизацию вместо атрибута авторизации. В своем пользовательском коде авторизации вы можете проверить наличие требуемых утверждений. Претензии могут быть ролевыми или любыми другими (имя пользователя, возраст и т.д.). Пользовательская авторизация обычно более гибкая, чем атрибут авторизации.

С уважением,

Мин Сюй.

person Ming Xu - MSFT    schedule 03.07.2012
comment
Я еще не выполнял никаких настроек, я только что создал пустое приложение MVC и сослался на Azure STS, используя пошаговые руководства на сайте Azure. У меня пока нет особых требований к утверждениям, и я не настраивал никаких дополнений в группах правил, только значения по умолчанию, определенные в вашей статье. Я удалил атрибут [Authorized] и просто установил <deny users="?" />. В этот момент, после того как я нажму Windows Live™ ID, он просто зациклится, так как я уже прошел проверку подлинности правильно. Каждый цикл начинается и заканчивается на странице входа. - person JoeGeeky; 03.07.2012
comment
Я могу подтвердить, что вижу Set-Cookie: FedAuth=xyz и Set-Cooke: FedAuth1=xyz, когда POST возвращается к localhost:7777. Ответ — 302, а заголовок Location: затем возвращается к точке входа Azure. В настоящее время я просто пытаюсь увидеть базовую работу аутентификации. - person JoeGeeky; 03.07.2012
comment
Я рекомендую вам проверить msdn.microsoft.com/en-us/library /windowsazure/hh127794.aspx для примера, чтобы увидеть, помогает ли это. - person Ming Xu - MSFT; 04.07.2012
comment
Я попробую это, но я уже следую образцу на сайте Azure и не могу воспроизвести задокументированный результат. Я не уверен, что следую еще одному; еще более сложный; sample - действительно решение, но я попробую, тем не менее. - person JoeGeeky; 04.07.2012
comment
Это тоже не сработало, и я точно следовал образцу. Я получил образец для запуска, но не смог авторизоваться для просмотра содержимого представления Directory, что и пытается продемонстрировать пример. В этом случае я вижу, что POST возвращается к действию SignIn, а принцип пользователя устанавливается с помощью ClaimsPrinciple, IsAuthenticated = true и AuthenticationType = "Federation". Когда я нажимаю Directory, меня снова отправляют через процесс входа в систему. - person JoeGeeky; 04.07.2012

Пожалуйста, убедитесь, что вы не изменили пример кода. Так как это официальный образец ACS SDK, многие люди пробовали его, и он будет работать.

Также в своем исходном сообщении вы упомянули, что настроили авторизацию ASP.NET:

<authorization>
     <deny users="?" />
   </authorization>

Пожалуйста, удалите это (как указано в документе), если вы не хотите использовать авторизацию ASP.NET (вы хотите использовать WIF).

С уважением,

Мин Сюй.

person Ming Xu - MSFT    schedule 05.07.2012
comment
Я точно следил за документацией для трех отдельных примеров на сайте Azure, и все они приводят к одному и тому же условию. В последнем образце, который вы предоставили, я снова прогнал его с тем же результатом. Я могу подтвердить, что раздел <authorization> был удален. Что касается моей конфигурации авторизации, я изначально приписал метод с [Authorize], но, как я сказал в предыдущем комментарии, я удалил его. Во всяком случае, у меня была такая же проблема, как с ним, так и без него. - person JoeGeeky; 05.07.2012
comment
Должен ли я вернуться к выплате алиментов? - person JoeGeeky; 07.07.2012