如何将Oauth令牌传递回浏览器?

yi0zb3m4  于 2023-10-15  发布在  其他
关注(0)|答案(1)|浏览(98)

我模糊地理解了Oauth完成了什么,但我对浏览器在成功认证后重定向时如何获得auth令牌感到困惑。我看到有“客户端”和“服务器”的图表,但我不确定这是什么意思,因为在我看来,浏览器是Web服务器的客户端,但这似乎不是所描述的。
浏览器是否只是在每次需要向回调端点进行身份验证时发送一个获取请求,或者Web服务器是否生成自己的令牌,然后存储一个单独的oauth令牌用于与身份验证服务器对话?

jtjikinw

jtjikinw1#

总而言之,授权服务器如何将令牌返回到原始站点/应用程序/客户端的3个不同选项:
1.在URL的片段中
1.在响应的主体中
1.作为POST请求中的表单值
用户在您的应用程序(OAuth客户端)上启动,您将其发送到authz服务器以进行身份验证和授权任何访问。之后,它们会被重定向回redirect_uri,通常是重定向回您的应用。
在某些情况下,在此步骤中包括令牌。在原始规范中,authz服务器指示浏览器重定向到重定向URI,并将令牌包含在该URL的片段部分中。
令牌包含在重定向的位置标头中的URL的片段部分中。这发生在隐式流中。由于多种原因,这被认为是不安全的。
RFC 6749 Sec. 4.2.2:

HTTP/1.1 302 Found
     Location: 
     http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA
           &state=xyz&token_type=example&expires_in=3600

在其他授权类型中,它作为对**/token**请求的 * 响应 * 的主体的一部分。这一步不涉及用户。这只是一个API请求和响应。Web应用程序对authz服务器上的/token端点进行API调用,authz服务器使用200 OK响应来响应该API调用,并将令牌包含在响应正文中。
来自RFC 6749第5.1节的示例:

HTTP/1.1 200 OK
 Content-Type: application/json;charset=UTF-8
 Cache-Control: no-store
 Pragma: no-cache

 {
   "access_token":"2YotnFZFEjr1zCsicMWpAA",
   "token_type":"example",
   "expires_in":3600,
   "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
   "example_parameter":"example_value"
 }

有一个additional spec引入了一种方法,让authz服务器在post请求中将token* 作为“form”中的值发送到重定向uri。

  • 如果在授权响应中返回令牌

OAuth 2.0表单后响应模式示例:

POST /callback HTTP/1.1
     Host: client.example.org
     Content-Type: application/x-www-form-urlencoded

     id_token=eyJhbGciOiJSUzI1NiI...&state=DcP7csa3hMlvybERqcieLHrRzKBra
  • 这是一个涉及用户身份验证的简化视图,但它涵盖了基本内容。

相关问题