Как выйти из Facebook при использовании ACS Azure? - PullRequest
3 голосов
/ 06 октября 2011

Правило № 6 политики разработчиков Facebook говорит, что я должен предоставить явную ссылку выхода из системы, но я не могу заставить ее работать.

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

Это может осложняться тем, что я использую Azure ACS и не использую типичные API FB. Вещи, которые я пробовал, включают в себя:

Попытка 1: выход из Facebook OAuth

 "http://www.facebook.com/logout.php?api_key={0}&;session_key={1}";
 // I don't know how to get the session key.  I attempted the values stored in 
 // the claim  "http://www.facebook.com/claims/AccessToken" but no luck

Попытка 2: выход ACS (недокументированный?)

https://tlsadmin.accesscontrol.windows.net/v2/wsfederation?wa=wsignoutcleanup1.0 

Ни один из этих подходов не позволяет другому пользователю Facebook войти в систему. Любые ссылки приветствуются.

Упрощенный вопрос

Как мне заставить * .accescontrol.windows.net перенаправить обратно на мой сайт?

Ответы [ 3 ]

2 голосов
/ 15 марта 2013

Обновление ACS за декабрь 2012 года включает поддержку федеративного единого выхода:

Использование протокола WS-Federation.Веб-приложения, использующие ACS для включения единого входа (SSO) с поставщиками удостоверений, использующими протокол WS-Federation, теперь могут использовать возможности единого выхода.Когда пользователь выходит из веб-приложения, ACS может автоматически вывести пользователя из поставщика удостоверений и из других приложений проверяющей стороны, которые используют тот же поставщик удостоверений.

Эта функция включена для удостоверения WS-Federation.провайдеры, включая Active Directory Federation Services 2.0 и Windows Live ID (учетная запись Microsoft).Чтобы включить единый выход, ACS выполняет следующие задачи для конечных точек протокола WS-Federation:

  • ACS распознает сообщения wsignoutcleanup1.0 от провайдеров идентификации и отвечает, отправляя сообщения wsignoutcleanup1.0 проверяющей сторонеприложения.

  • ACS распознает сообщения wsignout1.0 и wreply от приложений проверяющей стороны и отвечает, отправляя сообщения wsignout1.0 поставщикам удостоверений и сообщения wsignoutcleanup1.0 приложениям проверяющей стороны.

Из примера кода : ASP.NET MVC 4 с федеративным выходом , выполните действие, подобное следующему, чтобы выйти из ACS:

(обратите внимание, что Windows Identity Foundation теперь включена в .NET 4.5 Framework, поэтому новые пространства имен приведены ниже)

using System.IdentityModel.Services;
using System.IdentityModel.Services.Configuration;

public ActionResult Logout()
{
    // Load Identity Configuration
    FederationConfiguration config = FederatedAuthentication.FederationConfiguration;

    // Get wtrealm from WsFederationConfiguation Section
    string wtrealm = config.WsFederationConfiguration.Realm;
    string wreply;

    // Construct wreply value from wtrealm (This will be the return URL to your app)
    if (wtrealm.Last().Equals('/'))
    {
        wreply = wtrealm + "Logout";
    }
    else
    {
        wreply = wtrealm + "/Logout";
    }

    // Read the ACS Ws-Federation endpoint from web.Config
    // something like "https://<your-namespace>.accesscontrol.windows.net/v2/wsfederation"
    string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"];

    SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint));

    signoutRequestMessage.Parameters.Add("wreply", wreply);
    signoutRequestMessage.Parameters.Add("wtrealm", wtrealm);

    FederatedAuthentication.SessionAuthenticationModule.SignOut();

    string signoutUrl = signoutRequestMessage.WriteQueryString();

    return this.Redirect(signoutUrl);
}
0 голосов
/ 27 ноября 2011

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

Затем вам нужно отправить запрос wasignoutcleanup10 на используемый STS, который бы вывел вас из самой STS и, теоретически, должен выполнить запрос wasignoutcleanup1.0 (или эквивалентный) для всех других IP-адресов, которые былиучаствует в процессе (служба STS должна отслеживать, с какими IP-адресами связывались для каждого запроса)

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

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

0 голосов
/ 06 октября 2011

Как следует из этого поста: Выход из службы Azure AppFabric Access Control , вы можете создать пользовательскую кнопку выхода из системы и просто вызвать метод ederatedAuthentication.WSFederationAuthenticationModule.SignOut по нажатию кнопки.ACS затем должен обработать процесс выхода из системы.

...