Как реализовать oAuth2 между мобильным приложением ASP.NET Web Api и внешним поставщиком входа в систему

Представьте, что мы хотим реализовать архитектуру в соответствии с oAuth2. протокол. У нас есть веб-API ASP.NET в качестве службы и внешнего поставщика удостоверений, например. Google. Теперь мой клиент переходит к Google, получает токен доступа и делает запрос к моей службе REST. Как проверить этот токен? Как заставить мой веб-API доверять токенам Google?

У меня есть образец, который использует Identity Server 3 в качестве поставщика удостоверений (служба токенов безопасности), и мой веб-API работает как Промежуточное ПО OWIN, которое ссылается на сервер идентификации (из класса Startup.cs) и, таким образом, фактически доверяет ему, поэтому каждый токен, выданный Identity Server, понятен из моей службы REST. Как мне добиться этого, если я хочу сделать прямой вызов для входа в Google и использовать его в качестве стороннего поставщика?


person mathinvalidnik    schedule 02.09.2016    source источник
comment
Похоже, вы действительно хотите использовать openID, а не OAuth напрямую. Вам необходимо проверить утверждение openID, чтобы проверить токен connect2id.com/blog/how-to-validate-an-openid-connect-id-token   -  person Paulw11    schedule 02.09.2016
comment
См. также bitoftech.net/2014/10/27/   -  person Paulw11    schedule 02.09.2016
comment
@Paulw11Paulw11 Если мы предположим, что сам токен содержит любую информацию, обычно представленную утверждениями, а утверждения сгруппированы в области. Затем OpenId, который является как бы расширением oAuth2, добавляет новую область действия — идентификатор. Если моей службе REST на самом деле не нужно это знать, а нужно только знать, что этот пользователь уже проверен где-то еще, я хотел бы просто знать это, независимо от того, какой у него идентификатор, какой эмитент и т. д. Мне просто нужно знать что этот пользователь не является кем-то анонимным.   -  person mathinvalidnik    schedule 02.09.2016
comment
Затем вы можете проверить токен с помощью конечной точки tokenInfo — developers.google.com. /identity/sign-in/ios/backend-auth Вызов URL-адреса аутентификации токена, например googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123 должен дать вам ответ 200 и документ JSON с описанием токена.   -  person Paulw11    schedule 02.09.2016
comment
@Paulw11 Paulw11 Это действительно похоже на то, что я мог бы использовать. Спасибо!   -  person mathinvalidnik    schedule 02.09.2016


Ответы (1)


то, как вы кодируете этот сценарий, может работать следующим образом:

  1. вы создаете приложение Google, получаете ключи доступа и устанавливаете обратный URL
  2. Ваш внешний интерфейс перенаправляет пользователя на страницу входа в Google, передавая ключи доступа к вашему приложению.
  3. Google аутентифицирует пользователя, а затем вызывает ваше приложение с кодом авторизации.
  4. Затем вы вводите этот код в Google и получаете токен доступа.
  5. С токеном доступа теперь вы можете обратиться к API Google и получить любую информацию, к которой у вас есть доступ, а также узнать больше о пользователе. На этом этапе нормально создать связь между вашей собственной системой членства и системой Google OAuth2. Вы сохраните токен для последующих вызовов, а позже вы сможете использовать механизм refresh_token, чтобы продолжить общение с API Google, если вам это нужно.

Имея все это в виду, вам, очевидно, не понадобится собственный сервер авторизации, но вам все равно нужен сервер ресурсов (который, по сути, является вашим собственным REST API) и создайте собственное промежуточное программное обеспечение, чтобы оно могло понимать токены Google или любого другого провайдера, оно может говорить к API Google и т. д.

Вы должны реализовать свою собственную версию тега [Authorize], чтобы ваша система могла работать аналогичным образом, за исключением того, что вы больше не используете Owin.

person Andrei Dragotoniu    schedule 02.09.2016