到目前为止,我只有一个客户端(Web 应用程序)执行 OAUTH2 授权流程,然后将访问 token 和刷新 token 发送到服务器(ASP.NET Web API)。
然后在服务器上,这些 token 将用于针对 Google API 执行多项操作。
到目前为止一切都很完美,我们需要添加移动客户端来执行相同的 OAUTH2 授权流程。
这需要我在 Google 控制台下添加那些 Android 和 iOS 应用程序。所有 3 个(Web、Android 和 iOS)都属于同一个项目。
现在问题来了,因为在服务器上我必须使用 google 给我的 json 文件(带有 clientId 和 secret),直到现在它与 webapp 使用的相同。但现在由于我们在同一个项目中有两个新客户,我假设我可以使用我以前使用的相同 token 访问 Google Api,这些 token 现在也由 Android 和 iOS 发送。
但这似乎行不通,我明白了:
Google.Apis.Auth.OAuth2.Responses.TokenResponseException:错误:“unauthorized_client”,说明:“Unauthorized”,Uri:“”
有没有办法让它成为可能?我还考虑过根据客户端向我发送 token 的内容提供 json secret 文件,但查看文件结构,它们是不同的,iOS 甚至没有 json 文件,而是一个 plist。
如有任何帮助,我们将不胜感激。
最佳答案
在 Android 或 iOS 设备上收到的访问和刷新 token 只能在此设备上使用。例如,Android OAuth 客户端在 Google 中以其包名和签名证书指纹注册到 restrict usage to your Android app。 .
您的 Web 应用程序中收到的访问和刷新 token 可以传递到您的后端服务器。
如果您希望后端服务器能够在用户离线时代表用户进行 Google API 调用,您的服务器需要有自己的访问 token :
- 使用 Google Sign-In for Android 在您的 Android 和 iOS 应用程序中对用户进行身份验证或 Google Sign-In for iOS ;
- 在用户身份验证后请求额外的访问代码;
- 将其传递给您的后端服务器;
- 使用您的后端服务器客户端 ID 和客户端密码在服务器上交换此访问代码以获取其自己的访问和刷新 token 。
您的后端服务器 OAuth 客户端应具有 Web 应用程序
类型(您可以与您的 Web 应用程序共享一个 OAuth 客户端)。
详细说明可以在这里找到:
关于c# - Google.Apis 共享访问和刷新 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51456443/