google-chrome - 浏览器如何处理 OAuth2 中的 redirect_uri?
问题描述
我知道这redirect_uri
是 OAuth 流程的关键部分,但我的问题是浏览器如何在成功通过身份验证后实际处理从 IDP 返回的重定向请求?我很困惑,因为:
- 响应是 200 而不是 302 重定向
- 没有位置头响应
那么浏览器如何分析此响应并执行将您重定向到地址的操作redirect_uri
?
谢谢!
解决方案
浏览器处理重定向并没有什么神奇之处——无论是通过 30X 响应代码还是一些 Javascript 操作。
以 Azure AD 为例,假设您已登录 Microsoft 帐户。如果您可以捕获您的 OAuth2 请求的响应内容(端点类似于https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize?client_id...),就会有一个隐藏表单 -
<html>
<head>
<title>Working...</title>
</head>
<body>
<form method="POST" name="hiddenform" action="https://localhost/redirect_url">
<input type="hidden" name="id_token" value="ey..." />
<input type="hidden" name="state" value="state..." />
<input type="hidden" name="session_state" value="guid..." />
<noscript>
<p>Script is disabled. Click Submit to continue.</p>
<input type="submit" value="Submit" />
</noscript>
</form>
<script language="javascript">document.forms[0].submit();</script>
</body>
</html>
如您所见,表单包含您的 id_token。该脚本自动触发提交操作,该操作导航到您的端点,因此重定向
推荐阅读
- php - 替换字符串中的字符代码 8217 时 PHP 意外输出
- kotlin - 属性访问语法无法识别 Kotlin Safe Cast
- teradata - 是否有一种工具可以让用户查看他们的查询,但只能查看他们在 Teradata 上的查询?
- network-programming - NAT 中的 STUN 打孔不能随机工作
- elasticsearch - sql查询翻译查询DSL kibana
- gradle - 在多平台 js 和 jvm 项目中使用 kotlin-dce-js
- r - 在 R Shiny 界面中渲染 YouTube 链接
- python - 如何从文本中删除或分离表情符号(以“utf-8”编码),如下所示
- c# - 使用 WriteAllText 如何将 DataTable 列名写入 CSV 文件
- reactjs - useCallback 和 useMemo react hook 的缓存大小是多少,为什么?