所以我正在尝试使用google oauth为我的用户获取刷新令牌(实际上不使用google oauth来保存用户)。当我使用Google api的客户端OAuth时,一切正常,但是当您进行握手时,它们不提供刷新令牌,只有access_token。我需要一个持久的refresh_token,因为我将向用户google日历发出很多请求。
因此,我在我的rails服务器上设置了omniauth,使流程如下所示:
用户点击向Google进行身份验证(客户端)->
弹出屏幕转到后端服务器(localhost:3001/users/auth/google_oauth2
)->
后端Rails服务器重定向到Google进行身份验证->
他们通过Google进行身份验证,并重定向到后端服务器的回调(localhost:3001/users/auth/google_oauth2/callback
)->
后端服务器为适当的用户保存令牌,然后重定向回客户端应用程序localhost:3000
(无需在客户端上做任何事情,只需要将令牌保存在我的服务器上以备将来使用)
但是我确实需要知道身份验证是成功的,因此我可以在react / redux中调度适当的操作。在redux-auth中,它们检查popup.location
URI中的access_token 。问题是,当我使用此服务器端弹出流时,出现此讨厌的http / https错误:
(原始图片:http://imgur.com/v5NgIGr)
如果不是重定向到客户端,而是重定向到后端服务器中的视图,则可以在该页面上有一个脚本,该脚本window.close()
可以正常工作,但对我来说似乎很笨拙。我在考虑的另一个潜在解决方案是尝试使用window.postMessage
api,但我不知道该浏览器是否具有强大的浏览器支持/也似乎很hack。我可以从弹出窗口向另一个窗口(主客户端应用程序)发出一条消息,说oauth成功,因此我的反应代码可以执行任何所需的操作。
我觉得我只是完全错了整个流程,或者缺少明显的东西。
我还觉得,如果我在所有内容上都使用HTTPS,那么自从100%成为客户端之前,弹出窗口就可以很好地工作了,而我没有收到此SecurityError。我花了一些时间来弄清楚如何使用https获取我的webpack开发服务器,并尝试在rails上做同样的事情(认为我在rails方面做错了),但是仍然无法正常工作。也觉得我不需要在所有开发服务器上强制使用HTTPS来使其正常工作...
如果有人有任何想法或可以给我一些指导,将不胜感激!!
您正在以错误的方式处理此问题。Google的身份验证及其API确实有令人困惑的文档。我也遇到类似的情况,花了很多时间后,我找到了正确的方法。
从您的问题来看,我认为这似乎是相关的链接:https : //developers.google.com/identity/sign-in/web/server-side-flow
然后,这是您的流程的样子:
要将其映射到您的问题,这是您要执行的操作:
authorization code
。access_token
并持久化授权代码refresh_token
,您将在随后的Google api请求中使用该授权代码。希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句