19

刚刚注意到,在 OAuth2 中,当请求的授权类型为:“code”时,回调将其包含在查询字符串参数中(在“?”之后)。但是,当授权是“令牌”时,它作为片段传递(在“#”之后)。

这看起来是规范的一部分(https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-26#section-4.2

这种决定背后的理由是什么?

谢谢,彼得

4

1 回答 1

20

当您的浏览器被网站重定向到带有查询参数的 URL 时,查询字符串也是您的浏览器现在发送到主机的请求的一部分。片段仅由您的 Web 浏览器在本地评估,不包含在对主机的请求中。

授权代码授予的情况下,您通常有一个直接与提供者对话的 Web 应用程序,将数据发送到主机正是您所需要的:

  • Web 应用程序将您的浏览器重定向到您登录的提供商。
  • 提供者现在告诉您的浏览器 Web 应用程序的回调 URL 并附加一个授权代码。此代码必须发送到 Web 应用程序,因此它作为查询参数包含在对回调 URL 的请求中。
  • 现在,Web 应用程序本身在后台与提供者对话,并使用授权代码验证他确实被允许向提供者查询访问令牌

隐式授权的情况下,您通常会在浏览器中直接运行一些 Javascript 应用程序。无需向主机传递任何授权码,在大多数情况下也无需向主机发送访问令牌,因为浏览器中的 JS 可以直接与提供者对话。这样,您可以例如在服务器上创建一个网站,该网站使用从另一个提供商查询的信息,并征得用户同意,其中服务器永远不会访问用户的任何机密数据。(如果是受信任的网站,则不会将访问令牌发送到服务器。)

于 2013-02-05T22:54:41.010 回答