Jef*_*man 5 oauth-2.0 google-oauth google-api-js-client
我正在制作一个纯粹的客户端网络应用程序,它显示用户 Google 日历中的一些信息。他们通过 OAuth,授予日历访问权限,然后查看派生信息。按照Google Calendar JS 快速入门,我基本上可以正常工作了。
问题是,访问令牌的有效期仅为 1 小时(3599 秒)。之后,我需要再次让用户完成整个 OAuth 流程以获取新令牌,这需要在三个屏幕上单击四次。有什么办法可以避免每次都需要征求新的同意吗?
如果您可以获取刷新令牌,那么您可以定期使用它来创建新的访问令牌,并且它应该可以工作长达六个月。但是,由于具有额外的功能,刷新令牌需要客户端身份验证,客户端(即您的应用程序)必须提供客户端 ID 和客户端密钥,并且授权服务器可以更仔细地检查并撤销客户端(如果已更改)。妥协了。
但在这种情况下,您的客户端(如 Web 客户端)代码中不能包含客户端(如 OAuth 客户端)密钥;您共享了网页,并且网页的来源很容易看到。(隐含地,人们更担心浏览器内的令牌可能会被攻击者窃取,因此有兴趣减少此类令牌本身的能力。)因此,Google 的库甚至不提供请求的功能从基于浏览器的 Javascript 库刷新令牌。该流程使用“隐式授权”,其中客户端未经身份验证,用户只需遵循其用户代理中的重定向,这更简单,但有一些安全限制,因此 Google 和其他人通常仅针对当前会话应用程序,其中用户当前正在使用该页面。
如果您启动一台小型服务器(并使用 Google 的服务器端库之一),您可以获取并安全地存储刷新令牌,并根据需要获取新更新的访问令牌,每次从服务器发出更新的请求时你的身份/秘密。
还有一些流程可以让客户端应用程序获得寿命较长的刷新令牌,方法是让单独设备上的用户访问单独的 URL 并输入代码,我相信这仍然可以让客户端(您的应用程序)进行身份验证(因为您正在运行一个额外的小型服务来处理该问题并且可以使用客户端密钥)。但我不知道 Google 的 OAuth2 设置是否支持这一点。
(每次我再次阅读 OAuth 术语时,我都会感到困惑,因此,如果我在这里有任何错误的表述,请向真正的专家道歉。)
| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |