Google.Apis共享访问权限并刷新令牌

时间:2018-07-21 13:14:08

标签: c# oauth-2.0 google-api

直到现在,我只有一个客户端(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。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

可在此处找到详细说明:

答案 1 :(得分:-1)

我发现我可以使用多客户端授权,请在这里查看我的帖子: Deploying Gmail Apis Project Authentification probleme