Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook Stackexchange API隐式与显式_Facebook_Facebook Graph Api_Authentication_Oauth 2.0_Stackexchange - Fatal编程技术网

Facebook Stackexchange API隐式与显式

Facebook Stackexchange API隐式与显式,facebook,facebook-graph-api,authentication,oauth-2.0,stackexchange,Facebook,Facebook Graph Api,Authentication,Oauth 2.0,Stackexchange,这个问题的灵感来自stackexchange和FacebookAPI()上的文档,但通常可能更广泛地适用于OAuth2.0 我的问题是,当隐式模型看起来更简单时,为什么要使用显式身份验证模型?为什么要验证和访问内容 隐式方法是否存在局限性?对于node.js应用程序,哪种方法最合适?从技术上讲,node.js应用程序是服务器端应用程序,但似乎适合使用客户端javascript库 编辑 在阅读了一些内容之后,web客户端流的“隐式”本质似乎源于这样一个事实:资源所有者(用户)隐式信任客户端(web

这个问题的灵感来自stackexchange和FacebookAPI()上的文档,但通常可能更广泛地适用于OAuth2.0

我的问题是,当隐式模型看起来更简单时,为什么要使用显式身份验证模型?为什么要验证和访问内容

隐式方法是否存在局限性?对于node.js应用程序,哪种方法最合适?从技术上讲,node.js应用程序是服务器端应用程序,但似乎适合使用客户端javascript库

编辑

在阅读了一些内容之后,web客户端流的“隐式”本质似乎源于这样一个事实:资源所有者(用户)隐式信任客户端(web浏览器)。这意味着简化流程是合适的,因为这种隐含信任是给定的


这仍然会导致这样一个问题:当通过OAUTH 2.0执行身份验证时,资源所有者(用户)必须警惕他们是否隐式信任客户机。这似乎是一种潜在的危险姿态,因为它假定用户有意识和知识,并且可能会导致安全问题。

谈到OAuth 2.0,而不是stackexchange API,隐式流中存在风险元素,也称为隐式授权流。这是因为授权服务器将访问令牌发送到用户代理/web浏览器

为了尽量减少由此造成的任何损害,访问令牌被设置为短寿命。此外,在此场景中,访问令牌只能用于用户为其提供授权的作用域。这种类型的流主要用于没有服务器支持的更简单的web应用程序。你在Facebook上看到的那些相当令人恼火的应用程序就是一个例子,其他所有开发者都可以使用这种隐式流,而不必担心安排服务器

显式流,称为授权代码流更安全。这涉及到用户代理从服务器接收授权代码。此代码只能由注册的应用程序使用-您将在后端维护的服务器,具有有效凭据

一个例子:-
让我们假设有一些谷歌应用程序使用Facebook图形API。您可以打开谷歌应用程序网站并授权
i) 无论是浏览器接收令牌,谷歌应用程序制作的网页都会确保它点击API,获取数据并将其返回到服务器。
ii)或者,浏览器获取令牌,网页将其返回到google服务器。这确保了只有谷歌可以点击facebookapi(这对一家大公司来说是一种解脱)。此外,还有一个中央服务器,可以管理所有请求,并可以轻松生成用于监视请求/数量/模式的任何类型的指标

此显式流的另一个主要用途是脱机访问。在上述场景中,您的应用服务器可以获取刷新令牌,甚至在您未登录时也可以调用REST API


如果您有服务器端应用程序,我个人建议您使用授权代码流/显式流。

谢谢您的回答。要回答这个问题还有很长的路要走。我理解这两个流之间的实现差异,以及额外的安全性和使用未过期的访问令牌进行离线请求的能力似乎是在可能的情况下使用显式流的一个很好的理由。令牌的到期时间似乎取决于授权服务器,而不是用户(这似乎更正确)。例如,stackoverflow不允许来自隐式流的到期令牌。这意味着客户端可以很容易地在没有用户明确同意的情况下为长会话使用隐式流。令牌的过期由服务器控制,在任何OAuth实现中都不会由用户控制。抱歉,但我可能不理解这个问题。你有什么特别想问的吗?因为你似乎在质疑自己,回答自己。(我经常这样做!)试着更具体地描述这个需求,它可能也会帮助你和我其他人!!:)