Я создаю RESTfull-сервер с ASP.NET Web API 2. FTM У меня есть три клиентов: приложение AngularJs, приложение Android и IPhone.API-интерфейс Crossplatform multiclient oauth2
Мне нужно создать логин через Google и Facebook для всех, и вам нужна ваша помощь в его разработке.
Моя идея заключается в следующем (с помощью Google аутентификации в качестве примера):
в консоли Google Developer создать "клиента OAuth 2.0 идентификаторы":
- для AngularJS приложения (тип веб-приложения с разрешенным происхождением)
- для Android (тип Android)
- для IO (тип IO)
- для WEB API бэкэнда (веб-приложения типа без какого-либо разрешенных происхождения)
каждого клиент свяжется Google со своими библиотеками/APIs для авторизации и согласия запроса пользователя на прицелах, необходимых , но и для оффлайн использование. Так что authorization_code принимается клиентом от Google.
каждый клиент будет ссылаться на веб-сервер GET метод ExternalLogin и отправлять authorization_code в качестве входного параметра.
веб-сервер будет обмениваться (через API Google) повторно авторизационным_кодом на access_token и получать всю необходимую информацию о пользователе от Google (через API Google). Проверьте базу данных, если пользователь уже зарегистрирован (если нет - приложение создаст учетную запись), а затем введите токен локального доступа, который должен использоваться для всех дальнейших вызовов веб-сервера.
Преимущества довольно проста:
- простой поток, то же самое для каждого клиента
- один метод для входа/регистрация для каждого клиента
- логика в собирать данные пользователя в одном месте (веб-сервер) - так что, если нам нужны дополнительные данные для сбора от Пользователя, нам нужно внести изменения только в бэкэнд. Клиентам необходимо добавлять поля только для разрешения экрана.
Мои вопросы:
- является следующий поток правильно и достаточно стабильна? Будет ли он работать и для Facebook?
- FTM Я застрял на шаге 4. AngularJs получил authorization_code с его ClientId.Веб-сервер пытается обменять этот authorization_code для access_token с другим ClientId (у веб-бэкэнда есть свой ClientId в консоли разработчика Google, прочитанный выше). Я получаю сообщение об ошибке: unauthorized_client. Странно, вызывать все идентификаторы ClientID в одном и том же «Project» в консоли разработчика Google. Есть ли способ заставить его работать?
Примечание: пользователь, имеющий авторизацию с идентификатором клиента из вашего приложения AngualrJS, не получит доступ через Android. Идентификатор клиента, секретный токен обновления - это группа, которую они не смешивают. – DaImTo
@DaImTo благодарит за ваш комментарий. Мне нужно, чтобы пользователь авторизовался через Android/AngularJS/IOS ClientId, а затем передал authorization_code на бэкэнд и получил доступ к данным пользователей с помощью Web-Backend ClientId и передал authorization_code. Это не сработает, вы думаете? – z0omie
Обновление токена, созданного с помощью веб-учетных данных, не будет обновляться с использованием учетных данных для мобильного приложения. Если вы запрашиваете доступ к пользователю с помощью Android/AngularJS/IOS, вам нужно будет использовать учетные данные Android/AngularJS/IOS, чтобы получить доступ. Вы не можете их смешивать только потому, что они были созданы в рамках того же проекта. – DaImTo