【问题标题】:Google.Apis sharing access and refresh tokensGoogle.Apis 共享访问和刷新令牌
【发布时间】:2018-12-29 14:04:27
【问题描述】:

到目前为止,我有一个客户端(Web 应用程序)正在执行 OAUTH2 授权流程,然后将访问令牌和刷新令牌都发送到服务器(ASP.NET Web API)。

然后在服务器上,这些令牌将用于针对 Google API 执行多项操作。

到目前为止,一切都很完美,我们需要添加执行相同 OAUTH2 授权流程的移动客户端。

这需要我在 Google 控制台下添加那些 Android 和 iOS 应用程序。所有 3 个(Web、Android 和 iOS)都属于同一个项目。

现在问题来了,因为在服务器上我必须使用 google 提供给我的 json 文件(带有 clientId 和 secret),到目前为止,该文件与 webapp 使用的相同。但现在由于我们在同一个项目中有两个新客户端,我假设我可以使用我之前使用的相同令牌访问 Google Api,现在 Android 和 iOS 也发送这些令牌。

但这似乎不起作用,我明白了:

Google.Apis.Auth.OAuth2.Responses.TokenResponseException: Error:"unauthorized_client", Description:"Unauthorized", Uri:""

有没有办法让它成为可能?我还考虑过根据客户端向我发送令牌的方式提供 json 机密文件,但查看文件结构,它们是不同的,iOS 甚至没有 json 文件,而是 plist。

任何帮助将不胜感激。

【问题讨论】:

  • 令牌请求中没有重定向 URL 吗?
  • @KavinduDodanduwa 是的,我为基于网络的客户服务。

标签: c# oauth-2.0 google-api


【解决方案1】:

在 Android 或 iOS 设备上收到的访问和刷新令牌只能在此设备上使用。例如,Android OAuth 客户端在 Google 中注册,其包名称和签名证书指纹为 restrict usage to your Android app

您的 Web 应用程序中收到的访问和刷新令牌可以传递到您的后端服务器。

如果您希望后端服务器能够在用户离线时代表用户进行 Google API 调用,则您的服务器需要自己的访问令牌:

  • 在您的 Android 和 iOS 应用程序中使用 Google Sign-In for AndroidGoogle Sign-In for iOS 对用户进行身份验证;
  • 在用户认证后请求额外的访问码;
  • 将其传递给您的后端服务器;
  • 使用您的后端服务器客户端 ID 和客户端密码在服务器上交换此访问代码以获取其自己的访问和刷新令牌。

您的后端服务器 OAuth 客户端应该具有 Web application 类型(您可以与您的 Web 应用程序共享一个 OAuth 客户端)。

详细说明可以在这里找到:

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 2017-10-27
    • 2020-01-09
    • 2021-08-23
    • 2015-04-01
    • 2020-11-09
    • 2021-12-14
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多