我指的是以下链接的图4,以了解它背后的工作:
https://tools.ietf.org/id/draft-ietf-oauth-v2-31.html#grant-implicit
我无法理解为什么需要Web托管客户端资源?为什么User-Agent不直接将访问令牌传递给客户端?
答案 0 :(得分:3)
首先,将您对OAuth 2.0的引用更新为the latest one。
我们知道,在隐性拨款中, 资源所有者授予访问权限后,授权服务器使用重定向URI将用户代理重定向回客户端,访问令牌位于片段中。
例如:
http://www.myapp.com/googleapi/oauth/#access_token=ya29.JACdaU44_m0MQh0AAABLMVzZHm4KnUWyBECHJ9oM_0M2JC9x0xO6UoI9W8YNEw&token_type=Bearer&expires_in=3600
由于片段未返回给服务器(散列片段仅用于客户端),因此客户端脚本必须解析片段并提取access_token参数的值。
现在,问题来了,当然我们可以在客户端编写一个函数来解析片段中的访问令牌并直接使用它,它简单明了。 Here is a tutorial using this manner
但是,在标准中,有Web托管客户端资源。为什么? “Web托管客户端资源”是一个客户端资源,它可能包含一些html页面和JavaScript,当然它是由Web托管的,而不是在User-Agent中。由于授权服务器将在redirect_uri中再次使用片段中的访问令牌访问我们的Web应用程序,因此我们的客户端Web应用程序服务器将对其进行响应(解析哈希片段)。Here is a tutorial using this manner
总之,这两种方式之间的区别在于您放置解析功能。
将其直接放在客户端中,该函数检测用户代理是否点击了重定向URI,如果是,则从片段中解析访问令牌。
将其放入Web托管的客户端资源(位于重定向URI中),当授权服务器使用访问令牌访问重定向URI时,该函数会找到重定向URI解析它。
第二个是标准的,因为它充分利用了重定向URI,你也可以使用第一个。
据我所知,我没有找到关于第二种方式的任何安全考虑。