我可以在OAuth 2.0中使用Chrome Web Store支付吗

本文关键字:Web Chrome Store OAuth 我可以 | 更新日期: 2023-09-27 17:59:57

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

查看文档,我似乎需要一个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??
    )
);

我可以在OAuth 2.0中使用Chrome Web Store支付吗

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

简短回答

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

  • 使用不推荐使用的OpenID(请参阅详细答案)
  • 使用数字商品的谷歌钱包使用应用内支付

答案很长

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

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

注意事项:Google.NET客户端API不支持此迁移路径。因此,必须手动或使用第三方OAuth库进行身份验证。

如何:

  • 按照通常的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**需要openidprofile作用域才能检索OpenID标识符。查询付款API需要chromewebstore作用域
  • 然后从令牌端点交换访问令牌的代码(https://accounts.google.com/o/oauth2/token)

    • 此时,您将收到标准的access_tokenrefresh_token等变量,还将收到一个额外的id_token变量
    • id_token是包含OpenID信息的JWT编码字符串
    • 解码这个JWT编码的(你可以使用这个C#JWT库)字符串会给你一个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支付API进行通信
  • 仍然使用相同的OAuth凭据时,向以下URL发出签名请求:

    • https://www.googleapis.com/chromewebstore/v1/licenses/{appId}/{openId}
    • {appId}是Chrome Web Store中应用程序的ID
    • {openId}是JWT响应中的openid_id

这应该能满足您的需求:

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

这是OAuth2.0的完整概述。

帮助我解决了我在网络应用程序设置方面遇到的问题,希望它也能这样做。

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

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