OAuth中的“脱机”访问意味着什么?
“离线”一词对于OAuth服务器授予的离线访问意味着什么?
是否意味着资源服务器将返回有关用户的数据,即使用户退出第三方应用程序或用户从OAuth资源服务器(如Facebook或Google或Twitter)注销时也是如此?
离线访问是国际海事组织一个非常糟糕的名字,我认为它只是一个术语,谷歌并没有在Oauth的RFC中使用它,据我所知。
Google离线访问是什么?
当您请求离线访问时,Google身份验证服务器会返回一个Refresh-Token。 刷新令牌使您的应用程序能够在用户不在场且在应用程序前面代表用户请求数据。
需要离线访问的应用示例:
假设我有一款Super Awesome应用程序,可以下载您的Google Analytics数据,并将其制作成一个漂亮的PDF文件,并每天早晨通过电子邮件发送给您。 为此,我的应用程序需要有能力在您不在的时候访问您的Google Analytics数据,以便允许我这样做。 所以超真棒应用程序会请求离线访问,并且身份验证服务器将使用该刷新令牌返回刷新令牌。超棒应用程序可以在需要时请求新的访问令牌并获取您的Google Analytics数据。
不需要离线访问的应用示例
让我们尝试一些不错的应用,让您将文件上传到Google云端硬盘。 当您不在身边时,较差的应用程序无需访问您的Google云端硬盘帐户。 只有在线时才需要访问它。 所以理论上它不需要离线访问。 但在实践中,它仍然会得到一个更新的标记,这样它就不必再次要求您获得许可,这是我认为命名不正确的地方。
文档资料
如果授权代码交换中存在刷新令牌,则它可以随时用于获取新的访问令牌。 这称为离线访问,因为当应用程序获得新的访问令牌时,用户不必在浏览器中。
关于离线访问的真相
问题是,在许多情况下,认证服务器会将刷新令牌返回给您,无论您何时不需要实际要求它提供给您的任何内容。 让您在不在身边时访问用户数据的能力。 用户不知道你可以在那里访问那里的数据。 (它只有JavaScript库,我认为这个PHP库会隐藏你的RefreshToken,但它在那里)
示例:您可以使用下面的Google 3 leg 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"
}
我现在可以离线访问这些用户数据,我从来没有告诉他们我会拥有它。
按照设计,OAuth流返回的访问令牌会在一段时间(Google访问令牌需要1小时)后过期,作为安全机制。 这意味着任何想要使用用户数据的应用程序都需要用户最近通过OAuth流程,也就是在线。 请求脱机访问为应用程序提供了一个刷新令牌,它可以用来生成新的访问令牌,允许它在数据通过OAuth流程后很长时间访问用户数据,也就是说,在脱机时。
当用户不在场时继续运行应用程序时,需要离线访问。 例如,如果有每晚的批处理过程,或者您的应用程序响应了推送通知等外部事件。 但是,如果您只在用户主动使用应用程序时访问用户数据,则不需要离线访问。 每当您需要访问令牌时,只需向用户发送OAuth流程,并且如果他们以前授权访问您的应用程序,授权页面将立即关闭,从而使用户几乎看不到该流程。
对于Google API,您可以通过在您向用户呈现的授权网址中加入参数access_type = offline来请求离线访问。 使用“安装的应用程序”流程时,会自动请求脱机访问,因此会刷新令牌。
链接地址: http://www.djcxy.com/p/47981.html上一篇: What does "offline" access in OAuth mean?
下一篇: SSO .NET CAS Client keeps redirecting to homepage post successful authentication