为什么OAuth中的隐式授权授权需要一个;Web托管客户端资源“;?

为什么OAuth中的隐式授权授权需要一个;Web托管客户端资源“;?,oauth,oauth-2.0,user-agent,Oauth,Oauth 2.0,User Agent,我参考以下链接的图4以了解其背后的工作原理: 我无法理解为什么需要Web托管的客户端资源?为什么用户代理不直接将访问令牌传递给客户端?首先,将您对OAuth 2.0的引用更新为 正如我们所知道的,在默许赠款中, 在资源所有者授予访问权之后,授权服务器使用重定向URI将用户代理重定向回客户端,并且访问令牌位于片段中 例如: http://www.myapp.com/googleapi/oauth/#access_token=ya29.JACdaU44_m0MQh0AAABLMVzZHm4KnUW

我参考以下链接的图4以了解其背后的工作原理:


我无法理解为什么需要Web托管的客户端资源?为什么用户代理不直接将访问令牌传递给客户端?

首先,将您对OAuth 2.0的引用更新为

正如我们所知道的,在默许赠款中, 在资源所有者授予访问权之后,授权服务器使用重定向URI将用户代理重定向回客户端,并且访问令牌位于片段中

例如:

http://www.myapp.com/googleapi/oauth/#access_token=ya29.JACdaU44_m0MQh0AAABLMVzZHm4KnUWyBECHJ9oM_0M2JC9x0xO6UoI9W8YNEw&token_type=Bearer&expires_in=3600

由于片段没有返回到服务器(散列片段仅用于客户端),客户端脚本必须解析片段并提取access_令牌参数的值

现在,我们来回答您的问题,当然我们可以在我们的客户机中编写一个函数来解析片段中的访问令牌并直接使用它,它简单而直接

但是,在标准中,有Web托管的客户端资源。为什么? “Web托管客户端资源”是一种客户端资源,它可能包括一些html页面和JavaScript,当然它是Web托管的,而不是在用户代理中。由于授权服务器将在重定向uri处再次命中web应用程序,并在片段中包含访问令牌,因此客户端web应用服务器将响应它(解析哈希片段)

总之,这两种方式的区别在于将解析函数放在何处

  • 将其直接放入客户机it self中,该函数检测用户代理是否命中重定向URI,如果命中,则从片段解析访问令牌

  • 将它放在web托管的客户端资源中(位于重定向URI中),当授权服务器使用访问令牌点击重定向URI时,函数将定位重定向URI并解析它

  • 第二个是标准的,因为它充分利用了重定向URI,您也可以使用第一个


    据我所知,我还没有发现任何关于第二种方式的安全考虑。

    到目前为止,两个教程链接都已断开