Поток за социално влизане в OAuth2 (разрешаване на OAuth2 удостоверяване чрез Facebook/Twitter): има ли примери/литература?

Разработвам собствено мобилно приложение за персонализирано уеб базирано приложение за социална мрежа. Ние изграждаме REST API за комуникация с уеб сървъра и сме избрали OAuth2 като метод за удостоверяване (потокът grant_type=password).

Уеб приложението позволява на потребителите да влизат и да се регистрират с помощта на външни услуги (напр. Facebook и Twitter). Трябва да разрешим същото и в мобилното приложение. Въпросът е: как можем да направим това?

Мобилното приложение Pinterest е в състояние да управлява ситуацията (вижте приложеното изображение). Какъв е потокът, който е използван тук?

Изглед за влизане в Pinterest

Държат ли се като класическо приложение, работещо с OAuth (мобилното приложение действа като OAuth клиент директно с Facebook API?). Ако е така, тогава как може мобилното приложение да бъде удостоверено със сървъра на Pinterest? Предава ли Facebook OAuth маркера за достъп като идентификационни данни?

Графично представяне на проблема (вижте стрелката с ????):

Website API                 Mobile app                    Facebook OAuth

  +                           +                               +
  |                           |                               |
  |                           |       /oauth2/token           |
  |                           +------------------------------>|
  |                           |                               |
  |                           |       OAuth Access Token      |
  |                           |<-----------------------------+|
  |                           |                               |
  |           ????            |                               |
  |- - - - - - - - - - - - - -|                               |
  |                           |                               |
  |                           |                               |
  |    OAuth Access Token     |                               |
  |+------------------------->|                               |
  |                           |                               |
  |                           |                               |
  |   API Usage (w/ token)    |                               |
  |+------------------------->|                               |
  |<-------------------------+|                               |
  |                           |                               |
  |+------------------------->|                               |
  |<-------------------------+|                               |
  |                           |                               |
  |           ...             |                               |
  +                           +                               +

Актуализация: Този въпрос е доста подобен на моя .. Ако това е правилният път, който трябва да следвате, тогава втората+третата стъпка (предаване на токена на Facebook към нашия персонализиран API, плюс валидирането на самия токен) не може да бъде допълнителен тип предоставяне на OAuth2 (т.е. facebook_token )?


person Stefano Verna    schedule 04.07.2012    source източник
comment
Какво ще кажете за проксирането на всички API заявки и модифицирането на URL адреси, заглавки и параметри на заявки с вашите?   -  person makevoid    schedule 05.07.2012
comment
Здравейте, аз съм изправен пред абсолютно същия проблем. Намерихте ли работещо решение за това? Благодаря   -  person oiledCode    schedule 17.07.2012


Отговори (4)


Можете да опитате да използвате токена за достъп до fb, който току-що изтеглихте на мобилното си устройство. (може да бъде всеки друг доставчик). Изпратете го на вашия сървър към уеб услуга за вход/регистрация/и двете. От страна на сървъра можете да проверите кой е потребителят, като използвате fb sdk и токена за достъп, влезте в потребителя и му изпратите бисквитката/сесията.

person Adi    schedule 16.10.2012

Не съм разработчик на iOS, но в момента разработвам подобен работен процес в среда .NET, използвайки библиотеката DotNetOpenAuth с отворен код. Може би един поглед към него може да помогне.

Първо: методологията за удостоверяване зависи от доставчиците, които искате да поддържате.

Няколко четения, които може да изяснят:
http://softwareas.com/oauth-openid-youre-barking-up-the-wrong-tree-if-you-think-theyre-the-същото-нещо http://openid.net/get-an-openid/what-is-openid/
http://blog.bobcravens.com/2010/08/openid-and-oauth-using-dotnetopenauth-in-asp-net-mvc/ http://stackoverflow.com/questions/7996124/how-to-authorize-mobile-apps-with-a-third-party-by-oauth-but-connect-to-my-servi

Общ работен процес за удостоверяване:
1. Уеб приложението започва с представяне на област, която позволява на потребителя да избира между различни доставчици на OpenID / OAuth.
2. Вашето приложение се пренасочва към сървъра на доставчика (след възможно добавяне на информация за приложението към публикуваните данни - вижте препратката към API на конкретния доставчик за подробности). И OpenID, и OAuth използват серия от пренасочвания, за да удостоверят потребителя. Ключът е, че удостоверяването се извършва на сайта на доставчика и там се съхраняват паролите.
3. Потребителят влиза в избрания доставчик, след което се извършва ново пренасочване към вашия сайт (чрез URL механизъм за обратно извикване).
4. Това пренасочване включва информация за удостоверения потребител, която се предоставя от OpenID / OAuth доставчици. Най-малко пренасочването предоставя „потребителско име“ обратно на вашето приложение.
5. Използвайте тази информация, за да проверите дали удостовереният потребител може да влезе във вашия сайт.

person GianniRG    schedule 04.07.2012
comment
Благодаря Джани, но проблемът тук не е в това, че уеб приложението действа като OAuth клиент с Facebook: всичко това са класически, документирани неща. Въпросът ми е за мобилно приложение, което иска да използва персонализиран API, но трябва да се удостовери за него НЕ с директна OAuth връзка, а чрез OAuth авторизатор на трета страна (т.е. Facebook). - person Stefano Verna; 05.07.2012

Стефано

Използваме StackMob за това. Работи много добре и е много лесен за изпълнение.

StackMob SDK предлага OAUTH2 сигурност и удостоверяване чрез Facebook и Twitter.

Актуализация: StackMob вече не съществува от май 2014 г.

person radesix    schedule 30.08.2012
comment
Ще бъде любезно от ваша страна да обясните къде и как OP може да използва този SDK за или защо смятате, че това отговаря на всеки от неговите въпроси . - person Jan Gerlinger; 31.08.2012
comment
Да, благодаря radesix, виждам техния API поддържа обаждания за създаване и влизане на потребители чрез Facebook но не мога да намеря нищо свързано с OAuth2. Разбира се, те изглежда поддържат и протокола OAuth2, но не и за решаване на този конкретен проблем. - person Stefano Verna; 31.08.2012
comment
Стефано, не съм сигурен защо това няма да реши проблема ти. StackMob използва OAUTH 2, както сте поискали. Изпускам ли нещо? - person radesix; 31.08.2012
comment
Отговорът не разглежда как този конкретен поток за удостоверяване се обработва от StackMob в рамките на протокола OAuth2. - person Stefano Verna; 05.09.2012
comment
Стефано, вашият въпрос беше Уеб приложението позволява на потребителите да влизат и да се регистрират с помощта на външни услуги (напр. Facebook и Twitter). Трябва да разрешим същото и в мобилното приложение. Въпросът е: как можем да направим това? Отговорът, който публикувах, отговаря на вашия въпрос. Използването на StackMob позволява на потребителя да влезе чрез FB или Twitter, което след това ви дава токен при успешно удостоверяване. Когато карате кола, не е необходимо да знаете как работи всяка част от двигателя. Просто трябва да управлявате волана, газта и огледалата. Защо ви интересува КАК StackMob прави това във фонов режим? Моля, присъдете точките. - person radesix; 05.09.2012
comment
@radesix, не го приемай лично, но въпросът е как да разрешиш влизане през Facebook в мобилно приложение за упълномощаване на потребителя във вторичен OAuth API. StackMob няма нищо общо с OAuth2 поток :) - person Stefano Verna; 20.09.2012
comment
Актуализирах заглавието на въпроса, за да бъде по-ясно :) - person Stefano Verna; 20.09.2012
comment
@Stefano, не се обиждай; StackMob обаче има нещо общо с OAuth2 Flow. StackMob ви позволява да влизате чрез Facebook или Twitter. След като влезете, получавате OAuth Token, който може да бъде предаден на друг API. Всъщност създадохме екрана за вход, така че да изглежда почти точно като екранната снимка, която публикувахте. - person radesix; 20.09.2012
comment
Съжалявам, но това по никакъв начин не отговаря на въпроса! - person bjunix; 29.03.2014

Създайте различни OAuth клиентски идентификатори за вашите доставчици на социално влизане.

Пример:

Facebook -- Идентификационен номер на клиент #1 Twitter - Идентификационен номер на клиент #2


Създайте свои обществени маршрути за вашите социални потоци.

Пример:

http://www.test.com/auth/facebook/ http://www.test.com/auth/facebook/callback/

При успех на обратното извикване на социалния доставчик ще трябва програмно да извлечете данните от вашето хранилище за данни за въпросния потребител, след което да генерирате Access Token с какъвто и да е предварително дефиниран обхват, който искате да предоставите за ID на клиента под въпрос.


В случай, че сте имали трета страна, която директно се опитва да взаимодейства с вашите собствени клиенти, като се опитва да използва вашия API, това ще трябва да бъде процес в 2 стъпки.

Първо те (клиентът) трябва да преминат през процеса на социално влизане, както беше обяснено по-горе.

След това при успешното обратно извикване на социалния доставчик ще трябва да покажете интерфейс (вероятно уеббазиран) на клиента, позволяващ му да приеме/откаже обхвата на правата, поискани от третата страна. При първоначалния бит за социално влизане очевидно ще трябва да предадете long или да съхраните обхвата, поискан от третата страна, за да го предадете long за стъпката за обратно извикване на социалния доставчик.

person sgarbesi    schedule 02.01.2015