Невозможно завершить проверку подлинности ACS Azure в приложениях MVC

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

По сути, когда я нажимаю на вид, который я пометил [Authorize] пользователь перенаправляется на страницу входа в Azure со списком поставщиков удостоверений. Я выбираю провайдера (в данном случае Live) и регистрируюсь. На данный момент все это работает, как я ожидаю. После успешной аутентификации кажется (визуально), что я не перенаправлен обратно в свое приложение, вместо этого я возвращаюсь на страницу "Поставщики удостоверений". При просмотре этого в Fiddler кажется, что он действительно возвращается, но затем начинает цикл заново (HTTP Status Code 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 обновлены.

2 ответа

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

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

С уважением,

Мин Сюй.

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

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

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

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

С уважением,

Мин Сюй.

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