我们有一个应用程序可以从不同的客户端成功执行 Google 登录:Web、iOS 应用程序、Android 应用程序。我们现在正尝试在我们的 iOS 应用程序的Mac Catalyst版本上集成 Google 登录。
我们使用混合流,我们在客户端生成授权码并在服务器上交换它以获得访问和刷新令牌。
我找到了这个库https://github.com/elsesiy/GAppAuth并且我正在使用与 iOS 应用程序相同的凭据。
通过自定义方案登录后重定向到应用程序工作正常,我能够获得授权码。
但是当我与我的服务器共享授权码时,我在请求交换身份验证码以获取 access_token 和 refresh_token 时收到错误:
POST https://accounts.google.com/o/oauth2/token
Content-Type: application/x-www-form-urlencoded
参数:
- 代码(由客户发送)
- client_id(服务器客户端 ID)
- client_secret(服务器密码)
- grant_type="授权码"
未为本机客户端请求添加 redirect_uri。
回复:
400 {'error': 'invalid_grant', 'error_description': 'Bad Request'}
请注意,完全相同的流程适用于 iOS。我还检查了不同类型的凭据(本机客户端,类型:其他)
关于出了什么问题以及如何解决此问题的任何想法?
我怀疑 Google 登录库的某些功能在 GAppAuth 中未实现(请参阅https://github.com/openid/AppAuth-Android/issues/293)。