为什么 OAuth 中的隐式授权需要"Web-hosted Client Resource"?



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

https://tools.ietf.org/id/draft - ietf oauth v2 - 31. - html # grant-implicit

我不明白为什么需要web托管客户端资源?为什么User-Agent不直接将访问令牌传递给客户机?

首先,将OAuth 2.0的参考更新为最新的参考。

我们知道,在隐性授予中,资源所有者授予访问权限后,授权服务器使用重定向URI将用户代理重定向回客户端,访问令牌在片段中。

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

由于片段不返回给服务器(散列片段仅用于客户端),客户端脚本必须解析片段并提取access_token参数的值。

现在,这里来回答你的问题,当然我们可以在我们的客户端写一个函数来解析片段中的访问令牌并直接使用它,这很简单和直接。下面是一个使用这种方式的教程。

但是,在标准中,有web托管客户端资源。为什么?"web托管客户端资源"是一个客户端资源,它可能包括一些html页面和JavaScript,当然它是web托管的,而不是在用户代理中。由于授权服务器将在片段中使用访问令牌再次在redirect_uri处击中我们的web应用程序,我们的客户端web应用程序服务器将响应它(解析哈希片段)。下面是使用这种方式的教程

总之,这两种方式的区别就在于解析函数的位置。

  1. 把它直接放在客户端它自己,函数检测是否用户代理击中重定向URI,如果是,从片段解析访问令牌。

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

第二个是标准的,因为它使大多数重定向URI,你也可以使用第一个。

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

最新更新