Перенаправление на пользовательскую страницу входа с помощью Windows Identity Foundation - PullRequest
3 голосов
/ 13 июня 2011

Я использую Windows Identity Foundation со службой контроля доступа AppFabric Azure на сайте MVC3. Я пытаюсь понять, как контролировать, где WIF перенаправляет пользователя, если у меня есть AuthorizeAttribute на контроллере или в действии. (Это мой первый раз, когда я работаю с WIF, и, похоже, не так много полезной информации.)

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

Есть ли способ, изначально с WIF, сказать ему перенаправить на мою страницу входа, или мне придется написать свой собственный AuthorizeAttribute, чтобы сделать это для меня?

Спасибо!

Edit:

Поскольку в последнее время были предприняты некоторые действия, я подумал, что напишу некоторые из моих выводов. К сожалению, я не на 100% заставил все работать должным образом (так много движущихся частей), но я наконец-то получил WIF для перенаправления на мою страницу входа.

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

<system.web>
    <httpRuntime requestValidationMode="2.0" />
    <authentication mode="Forms" >
        <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    ...
</system.web>

Отказ от ответственности: я не знаю, является ли это правильным способом сделать что-то с WIF - это просто случилось, чтобы решить мою проблему. Я могу использовать обычный атрибут [Authorize] на контроллерах или действиях, и я получаю правильные перенаправления на страницу входа в систему, как если бы я использовал аутентификацию форм.

Ответы [ 2 ]

3 голосов
/ 14 июня 2011

Я немного поиграл с образцом, и в зависимости от того, что вам нужно сделать перед перенаправлением, это может или не поможет.

В global.asax я добавил обработчик к событию " RedirectingToIdentityProvider " и настроил его для добавления, скажем, whr параметр. Для этого вам необходимо сначала добавить обработчик к событию ConfigurationCreated :

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterRoutes(RouteTable.Routes);

    FederatedAuthentication.ServiceConfigurationCreated += new EventHandler<Microsoft.IdentityModel.Web.Configuration.ServiceConfigurationCreatedEventArgs>(FederatedAuthentication_ServiceConfigurationCreated);   
}

    void FederatedAuthentication_ServiceConfigurationCreated(object sender, Microsoft.IdentityModel.Web.Configuration.ServiceConfigurationCreatedEventArgs e)
    {
        var m = FederatedAuthentication.WSFederationAuthenticationModule;
        m.RedirectingToIdentityProvider += new EventHandler<RedirectingToIdentityProviderEventArgs>(m_RedirectingToIdentityProvider);
    }

    void m_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
    {
        var sim = e.SignInRequestMessage;
        sim.HomeRealm = "Google";
    }

Работает со стандартным атрибутом Authorize .

Если этой точки расширяемости недостаточно, вы можете написать наш собственный атрибут, чтобы иметь полный контроль над процессом.

Посмотрите на образец № 3 или № 7. Не MVC3, но на MVC2 и очень близко к тому, что вы делаете. http://claimsid.codeplex.com

Процесс описан здесь:

http://msdn.microsoft.com/en-us/library/ff966481.aspx#sec14

1 голос
/ 06 августа 2011

Я верю, что вы хотите сделать, можно найти в следующем примере: http://acs.codeplex.com/wikipage?title=MVC3%20Custom%20Login&referringTitle=Samples

Также проверьте раздел Конфигурация федеративной аутентификации на этой странице на предмет свойства passiveRedirectEnabled: http://msdn.microsoft.com/en-us/library/ee517293.aspx

passiveRedirectEnabled - Boolean - по умолчанию false Управляет включением модуля для автоматического перенаправления несанкционированные запросы в ГТС.

...