Ответ 1
Я хотел оставить свой собственный опыт здесь, чтобы другие могли видеть, что это не просто вопрос использования существующего идентификатора, возвращаемого с авторизованного запроса конечной точке профиля пользователя, поскольку это не идентификатор, требуемый API платежей Chrome....
Короткий ответ
Невозможно использовать только OAuth2.0 для размещенного приложения. Единственными опциями для размещенного приложения являются:
- Использовать устаревший OpenID (см. подробный ответ)
- Использовать платежи в приложениях с помощью Google Кошелька для цифровых товаров.
Длинный ответ
Нам еще нужно использовать OpenID, однако Google предоставил путь миграции для пользователей OpenID к OAuth2.0 под названием OpenID Connect. Цель этой миграции - сопоставить старое поле fedId
с новыми идентификаторами пользователя Google+.
Это позволяет нам получить идентификатор OpenID с использованием существующего процесса OAuth 2.0.
Предостережение. API-интерфейсы Google.NET Client не поддерживают этот путь миграции. Поэтому аутентификация должна выполняться вручную или с помощью сторонней библиотеки OAuth.
Howto:
-
Как обычно, поток OAuth направляет пользователя к конечной точке Authenticate (https://accounts.google.com/o/oauth2/auth) со следующими переменными:
- openid.realm =
http://localhost
** Требуется, гдеhttp://localhost
соответствует вашей переменной redirect_uri - scope = профиль openid https://www.googleapis.com/auth/chromewebstore.readonly ** Области
openid
иprofile
требуются в чтобы получить идентификатор OpenID. Область запросаchromewebstore
требуется для запроса API платежей.
- openid.realm =
-
Затем замените код для токена доступа с конечной точки Token (https://accounts.google.com/o/oauth2/token)
- В этот момент вы получите стандартные переменные
access_token
,refresh_token
и т.д., но также дополнительную переменнуюid_token
. - Это
id_token
представляет собой строку в формате JWT, содержащую информацию OpenID. - Декодирование этого JWT-кодированного (вы можете использовать эту С# JWT Library) строка даст вам строку JSON в следующем формате:
{ "aud": "<googleuserid>.apps.googleusercontent.com", "at_hash": "<hashcode>", "iss": "accounts.google.com", "openid_id": "<!! The fedId we require !!>", "exp": <id>, "azp": "<googleuserid>.apps.googleusercontent.com", "iat": <id>, "sub": "<googleuserid>" }
- На этом этапе мы наконец нашли то, что искали,
openid_id
. Это можно использовать для связи с API платежей Chrome.
- В этот момент вы получите стандартные переменные
-
При использовании тех же учетных данных OAuth сделайте подписанный запрос по следующему URL-адресу:
-
https://www.googleapis.com/chromewebstore/v1/licenses/{appId}/{openId}
-
{appId}
- это идентификатор вашего приложения в интернет-магазине Chrome. -
{openId}
являетсяopenid_id
из ответа JWT
-