gpt4 book ai didi

c# - 我可以通过 OAuth 2.0 使用 Chrome 网上应用店付款吗

转载 作者:可可西里 更新时间:2023-11-01 07:58:35 26 4
gpt4 key购买 nike

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

查看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??
)
);

最佳答案

我想在这里留下我自己的经验,以便其他人可以看到这不仅仅是使用从授权请求返回到用户配置文件端点的现有 Id 的问题,因为这不是 Chrome Payments 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 配置文件 https://www.googleapis.com/auth/chromewebstore.readonly **两者openidprofile需要范围才能检索 OpenID 标识符。 chromewebstore查询支付 API 需要范围。
  • 然后从 token 端点 (https://accounts.google.com/o/oauth2/token) 交换访问 token 的代码

    • 此时您将收到标准 access_token , refresh_token等变量,还有一个额外的 id_token变量。
    • id_token是包含 OpenID 信息的 JWT 编码字符串。
    • 解码此 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}openid_id来自 JWT 响应

关于c# - 我可以通过 OAuth 2.0 使用 Chrome 网上应用店付款吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23289117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com