Wat*_* v2 31 oauth google-api google-oauth google-oauth2
对于OAuth服务器授予的离线访问,"离线"一词到底意味着什么?
这是否意味着即使用户退出第三方应用程序或用户从OAuth资源服务器(如Facebook或Google或Twitter)注销,资源服务器也将返回有关用户的数据?
DaI*_*mTo 34
离线访问是IMO一个非常糟糕的名称,我认为这个术语只有谷歌使用它不在RFC中为Oauth记住.
什么是谷歌离线访问?
当您请求Offline Access时,Google身份验证服务器会返回Refresh-Token.刷新令牌使您的应用程序能够在用户不在场时和应用程序前代表用户请求数据.
需要离线访问的应用示例:
假设我有一个Super Awesome应用程序可以下载您的Google Analytics数据,并将其制作成一个漂亮的PDF文件,并每天早上通过您的统计信息发送给您.为此,我的应用程序需要能够在您不在的时候访问您的Google Analytics数据,以允许我这样做.因此,Super Awesome应用程序将请求脱机访问,并且身份验证服务器将返回具有该刷新令牌的刷新令牌.超级棒的应用程序可以在需要时请求新的访问令牌并获取您的Google Analytics数据.
不需要离线访问的应用示例
让我们试试Less awesome app,它可以让你将文件上传到Google Drive.当您不在时,不太棒的应用程序不需要访问您的Google云端硬盘帐户.它只需要在线时访问它.所以理论上它不需要离线访问.但实际上它确实如此,它仍然会获得刷新令牌,因此它不必再次请求您的许可,这是我认为命名不正确的地方.
文档的东西
如果授权代码交换中存在刷新令牌,则可以随时使用它来获取新的访问令牌.这称为脱机访问,因为当应用程序获取新的访问令牌时,用户不必出现在浏览器中.
离线访问的真相
问题是,在很多情况下,验证服务器会将刷新令牌返回给您,无论您不必实际要求它提供给您的任何内容.当您不在时,为您提供访问用户数据的能力.用户不知道您可以在没有他们的情况下访问那些数据.(它只是javascript库,我认为PHP库隐藏了RefreshToken,但它在那里)
示例:您可以使用以下说明对Google 3有腿的Oauth流程进行测试
但只是张贴
https://accounts.google.com/o/oauth2/token code = {AuthCode}&client_id = {ClientId} .apps.googleusercontent.com&client_secret = {ClientSecret}&redirect_uri = urn:ietf:wg:oauth:2.0:oob&grant_type = authorization_code
响应:
{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}
Run Code Online (Sandbox Code Playgroud)
我现在可以离线访问这些用户数据了,我从来没有告诉他们我会拥有它.
根据设计,OAuth流程返回的访问令牌会在一段时间(Google访问令牌为1小时)后作为安全机制过期.这意味着任何想要使用用户数据的应用程序都需要用户最近通过OAuth流程,即在线.请求离线访问为应用程序提供了一个刷新令牌,可用于生成新的访问令牌,允许它在数据通过OAuth流程后很长时间内访问用户数据,即脱机时.
当用户不在时,应用程序继续运行时,需要进行脱机访问.例如,如果有一些夜间批处理过程,或者您的应用程序响应推送通知等外部事件.但是,如果您只在用户主动使用应用程序时访问用户数据,则无需离线访问.只需在每次需要n访问令牌时通过OAuth流发送用户,如果他们之前已授予对您的应用程序的访问权限,则授权页面将立即关闭,从而使该过程对用户几乎不可见.
对于Google API,您可以通过在您向用户提供的授权网址中包含参数access_type = offline来请求离线访问.使用已安装的应用程序流时,将自动请求脱机访问,从而刷新令牌.
| 归档时间: |
|
| 查看次数: |
19157 次 |
| 最近记录: |