跨客户端Google OAuth:在iOS上获取授权码并在服务器上访问令牌

我正在尝试使用iOS应用程序和Rails Web应用程序设置Google OAuth。 我有2个独立的客户端(当然有不同的客户端ID,但有相同的前缀)在API控制台中设置。 一个用于iOS应用程序,另一个用于Web应用程序(也有一个client_secret ,我想用iOS上的AppAuth SDK获取用户的authentication码,然后发送到我的web应用程序,然后执行交换为访问令牌。

首先,这听起来像是一个合理的事情,或者是不可能像这样的客户分割交易?

我第一次尝试只是采取authentication代码,并执行交换,但失败与missing_code_verifier invalid_grant错误,所以我也传递了相同的code_verifier AppAuth用于获得authentication代码到我的服务器,并修复该错误。 首先,是否有必要将这个validation码传递给服务器? 似乎有点奇怪。

但是,现在,它会因为unauthorized_client错误而失败。 我的networking应用程序正在提出这样的要求:

 { "grant_type"=>"authorization_code", "code"=>"4/XYZ...", "client_id"=>"WEB_APP_CLIENT_ID_HERE.apps.googleusercontent.com", "client_secret"=>"WEB_APP_CLIENT_SECRET_HERE", "redirect_uri"=>"https://www.myapp.com/oauth_callback", "parse"=>"json", "code_verifier"=>"CODE_VERIFIER_STRING_HERE" } 

看像这样的post:

  • 无法在Cross Client google oauth2.0中交换访问令牌和刷新令牌的授权代码
  • Google+login服务器端应用程序,交换身份validation码访问令牌

它看起来像redirect_uri可能是一个问题在这里。 iOS上的我的AppAuthconfiguration将redirectURI设置为com.googleusercontent.apps.iOS_CLIENT_ID_HEREInfo.plist URLscheme。 API控制台中的Web应用程序的“授权redirectURI”部分有一堆url,我也添加了com.google... 这个configuration不正确? 进行跨客户端身份validation时, redirect_uri是否重要?

任何帮助是极大的赞赏! 我所有的反复试验迄今都没有成果:(

我是AppAuth的首席维护者,并在Google Identity Platform上工作; 希望我能帮上忙。

我想使用iOS上的AppAuth SDK获取用户的authentication码,然后将其发送到我的networking应用程序,然后执行交换访问令牌。

首先,这听起来像是一个合理的事情,或者是不可能像这样的客户分割交易?

交换服务器上的代码听起来很合理,但我认为你使用的configuration可能是不正确的。 如果您在服务器上请求交换代码,请在授权服务器的请求中使用服务器的客户端ID 。 从您的描述中,您的授权服务器请求听起来像是发送您的iOS客户端ID,然后您正在与您的服务器客户端ID进行交换,我相信这就是为什么您看到“unauthorized_client”错误。

这不是很好logging,为此道歉。 在关于“离线访问”的文档的这一部分中提到了这一点 ,尽pipe它纯粹是通过GoogleApiClient来讲述Android的使用。

是否有必要将此validation码传递给服务器? 似乎有点奇怪。

PKCE背后的意图是确保进行授权请求的实体与进行代码交换请求的实体相同。 code_verifier不应该在正常情况下离开设备。

但是,如果您正在使用由您的后端控制的客户机密钥交换您的代码,则不需要使用PKCE。 您可以在AppAuth中为此scheme禁用PKCE。

Interesting Posts