Войдите через facebook и используйте oauth 2.0 для аутентификации вызовов API REST.

Я использую структуру Spring и архитектуру REST в своем API. В настоящее время я аутентифицирую свой вызов REST, отправляя имя пользователя и пароль при каждом вызове. И пользователи хранятся в моей базе данных.

Теперь я планирую использовать oauth 2.0 для доступа к своим защищенным ресурсам, а также планирую использовать Facebook Login в качестве механизма аутентификации.

Я прочитал о spring-security-oauth2 и реализовал в небольшом примере, что он отлично работает.

Я читал о spring-social, а также реализовал его и могу получить доступ к facebook api.

Теперь все, что я хочу знать, это как я могу войти в систему через Facebook, а затем использовать oauth 2.0 для защиты своих ресурсов.

Любая помощь будет глубоко оценена.


person khobab    schedule 12.02.2013    source источник
comment
С чем у тебя проблемы   -  person smk    schedule 12.02.2013
comment
@SajitKunnumkal Использование facebook api дает мне токен доступа к facebook, в то время как для аутентификации с помощью oauth 2.0 требуется токен, сгенерированный oauth 2.0. Теперь я запутался, как я могу использовать токен доступа facebook для аутентификации запросов к защищенным ресурсам моего API.   -  person khobab    schedule 13.02.2013


Ответы (1)


Вы бы не хотели использовать токен доступа, выданный Facebook, для защиты своих собственных ресурсов. Токен Facebook представляет собой трехстороннее соглашение между вашим приложением, Facebook и вашим пользователем. Если вы хотите использовать OAuth для защиты своих собственных ресурсов, это совершенно другое соглашение между потребителем этих ресурсов, вашим сервером и пользователем, которому принадлежат эти ресурсы на вашем сервере.

Подумайте об этом так: когда вы используете API Facebook, ваше приложение (A) является потребителем, Facebook (FB) — поставщиком, а общий пользователь (U1) объединяет их вместе. Но когда кто-то потребляет ресурсы на вашем сервере, то ваше приложение (А) выступает в роли поставщика, какое-то другое приложение (Х) является потребителем, и есть общий пользователь (U2), который объединяет их вместе. Это может быть один и тот же человек (например, U1 == U2), который согласился на договоренность в обоих случаях, но роли поставщика и потребителя изменились.

Я предполагаю, что, вероятно, есть способ заставить Spring Security для OAuth выдавать тот же токен доступа, что и Facebook, но это не очень хорошая идея.

person Craig Walls    schedule 13.02.2013
comment
поэтому я хочу войти в свой защищенный oauth API через вход в Facebook. Как я могу этого добиться? - person khobab; 13.02.2013
comment
Что обычно делается здесь, так это то, что ваш пользователь будет аутентифицироваться в пользовательском HTML-интерфейсе вашего приложения через Facebook. Это приведет к тому, что Facebook выдаст токен доступа, с помощью которого вы будете аутентифицировать пользователя. Здесь могут помочь Spring Social ProviderSignInController или SocialAuthenticationFilter. После аутентификации в вашем приложении они разрешат какому-либо клиенту вашего API доступ к API от их имени. Это приведет к тому, что S2OAuth выдаст клиенту токен доступа. - person Craig Walls; 14.02.2013
comment
Распространенным примером (однако не обязательно с использованием Spring Social или S2OAuth) такого подхода является Foursquare. Вы можете войти в Foursquare через Facebook. И вы можете разрешить другому клиенту доступ к Foursquare от вашего имени. Но это 2 разные авторизации и 2 диф. заключаются соглашения. Еще одним примером такого подхода, в котором используется Spring, является Greenhouse (github.com/SpringSource/greenhouse). - person Craig Walls; 14.02.2013
comment
Я нахожусь в том же положении, что и ОП, у меня практически те же требования. Я думаю, моя трудность заключается в том, чтобы понять различных игроков в танце oauth и какую роль они играют. Насколько я понимаю, у меня есть REST API, и к нему будет клиент (еще не написанный, но, скорее всего, веб-клиент с angularjs). И я хочу, чтобы пользователи аутентифицировались с помощью facebook. Если они аутентифицированы Facebook, то им разрешено использовать REST API. Исходя из этого, я не понимаю, почему я не хочу использовать токен, выпущенный facebook ?? - person Nathan Russell; 06.12.2016