【问题标题】:Can I use Chrome Web Store payments with OAuth 2.0我可以通过 OAuth 2.0 使用 Chrome 网上应用店付款吗
【发布时间】:2014-06-10 22:21:45
【问题描述】:

我编写了一个托管的 Chrome Web 应用程序,它使用适用于 .NET 的 Google API 客户端库通过 OAuth 2.0 对用户进行身份验证。现在我想使用内置的 Chrome Web Store Payments 向我们的应用程序添加付款。

查看the documentation,我似乎需要一个 OpenID URL 来检查付款。

由于我使用的是 OAuth 而不是 OpenID 身份验证,如何获取此 UserID/OpenID URL?

var service = new Google.Apis.Oauth2.v2.Oauth2Service(
    new BaseClientService.Initializer
    {
        HttpClientInitializer = userCredential,
        ApplicationName = "My App Name",
    }
);
HttpResponseMessage message = await service.HttpClient.GetAsync(
    string.Format("https://www.googleapis.com/chromewebstore/v1/licenses/{0}/{1}", 
        appId,
        fedId // Where do I get this??
    )
);

【问题讨论】:

  • 在哪里检索usercredential 变量?
  • userCredential 是个人用户的 OAuth 令牌,我根据 Google 客户端库通过 IAuthorizationCodeFlow 进程检索它。这是我要验证其许可证的用户。
  • 你是否通过Google App Engine配置了OpenID?
  • 我没有使用 OpenID 或 Google App Engine。我正在使用 .NET 和 OAuth 2.0 编写托管应用程序
  • 如果你读到这个https://developers.google.com/accounts/docs/OAuth2InstalledApp我相信你可以解决这个问题

标签: c# google-oauth google-chrome-app google-api-dotnet-client


【解决方案1】:

我想在这里留下我自己的经验,以便其他人可以看到这不仅仅是使用从授权请求返回到用户配置文件端点的现有 ID 的问题,因为这不是 Chrome 支付 API 所需的 ID ...

简答

对于托管应用程序,不能使用 OAuth2.0。托管应用程序的唯一选项是:

  • 使用已弃用的 OpenID(请参阅详细答案)
  • 通过 Google 电子钱包使用应用内付款购买数字商品

长答案

我们仍然必须使用 OpenID,但是 Google 为 OpenID 用户提供了一个迁移到 OAuth2.0 的路径,称为OpenID Connect。此迁移的目的是将旧的 fedId 字段映射到新的 Google+ 用户 ID。

这允许我们使用现有的 OAuth 2.0 流程检索 OpenID 标识符。

警告:Google .NET 客户端 API 不支持此迁移路径。所以身份验证必须手动完成或使用3rd party OAuth library

操作方法:

  • 按照通常的 OAuth 流程,使用以下变量将用户定向到 Authenticate 端点 (https://accounts.google.com/o/oauth2/auth):

    • openid.realm=http://localhost ** 必需,其中http://localhost 与您的 redirect_uri 变量匹配
    • scope=openid profile https://www.googleapis.com/auth/chromewebstore.readonly ** 需要 openidprofile 范围才能检索 OpenID 标识符。查询支付 API 需要 chromewebstore 范围。
  • 然后将代码交换为来自 Token 端点 (https://accounts.google.com/o/oauth2/token) 的访问令牌

    • 此时您将收到标准的access_tokenrefresh_token 等变量,还有一个附加的id_token 变量。
    • id_token 是一个 JWT 编码的字符串,包含 OpenID 信息。
    • 解码此 JWT 编码(您可以使用此 C# 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。这可用于与 Chrome Payments API 通信
  • 在仍使用相同的 OAuth 凭据的同时,向以下 URL 发出签名请求:

    • https://www.googleapis.com/chromewebstore/v1/licenses/{appId}/{openId}
    • {appId} 是您的应用在 Chrome 网上应用店中的 ID
    • {openId} 是来自 JWT 响应的 openid_id

【讨论】:

  • 实施此操作后,我发现上述方法仅在您授权为有权在 Chrome 开发人员仪表板上查看项目的用户帐户时才有效。这意味着您必须授权为特定用户,而不是当前用户,才能执行此检查。
【解决方案2】:

这应该可以满足您的需求:

https://developers.google.com/accounts/docs/OAuth2

它是 OAuth2.0 的完整概述。

帮我解决了我在设置 webapp 时遇到的问题,希望它也能解决问题。

P.S - 我不确定,但这可能正是您想要的:

https://developers.google.com/accounts/docs/OAuth2InstalledApp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2016-10-24
    • 2018-10-10
    • 2012-07-24
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多