Гибридная аутентификация с asp.net Идентификация и авторизация Android

#android #asp.net-web-api #oauth-2.0 #google-oauth #asp.net-identity-2

#Android #asp.net-web-api #oauth-2.0 #google-oauth #asp.net-identity-2

Вопрос:

Я создаю веб-сайт на asp, который использует Identity (версия 2.0), а также приложение для Android, подключенное к веб-сайту через Web API.

Я настроил Identity на использование учетных записей Google OAuth и работает довольно хорошо. Прямо сейчас я пытаюсь создать веб-API для приложения, и мне также нужно аутентифицировать мобильных пользователей.

Я дошел до того, что настроил идентификацию для управления токенами на предъявителя для api. Но для выполнения входа в систему единственный способ, который я нашел, — это использовать пользователя и пароль, как указано в документации:

 grant_type=passwordamp;username=useramp;password=pass
 

Или выполните вызов OAuth через Интернет.

Поскольку Android также управляет Google OAuth. Есть ли способ настроить идентификацию для выполнения входа с помощью Google Oauth?

Я не нашел способа управлять внешними токенами на предъявителя или использовать токены аутентификации Google для выполнения подписи с помощью Web Api с идентификатором.

Возможно, я что-то недопонимаю.

Заранее благодарю.

Комментарии:

1. Отличный вопрос, я рад, что вы сами узнали ответ. Пожалуйста, напишите решение в ответе на свой собственный вопрос. Я проголосую за это! 🙂

Ответ №1:

Хорошо, каким-то образом я нашел, как это сделать.

  1. В Android получите идентификационный токен, используя scope audience:server: как в документах Google «Аутентификация и авторизация учетных записей».
  2. Отправьте конечному элементу токена веб-API в качестве пользователя адрес электронной почты и в качестве пароля токен.

    grant_type=пароль и имя пользователя={электронная почта}и пароль={GoogleToken}

  3. В моем классе extendend из OAuthAuthorizationServerProvider на сервере я добавил проверку токена как из репозитория github googleplus / gplus-verifytoken-csharp в метод GrantResourceOwnerCredentials
  4. Если токен действителен, я могу заполнить UserLoginInfo и найти пользователя с помощью UserManager.

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

В любом случае, я думаю, что должен быть более элегантный способ сделать это.