Azure AD单点登录时,微软如何通过POST方法重定向至客户端应用?
Azure AD SSO中POST方式传递id_token的实现原理
你说的没错,HTTP标准的3xx重定向确实只支持GET方法,没法直接携带表单数据。Azure AD这里用的是开发里很常见的技巧——它返回的不是直接的重定向响应,而是一个包含自动提交表单的HTML页面。
具体流程是:
- 用户完成微软端的认证后,Azure AD会向浏览器返回一段HTML代码,里面包含一个预设好的表单:表单的
action指向你的Web应用回调地址,method设为POST,同时把id_token等认证信息放在隐藏的<input>字段里。 - 这个HTML页面还会自带自动提交逻辑,要么是通过
<body onload>触发表单提交,要么是内嵌一段简单的JavaScript代码自动执行表单提交操作。 - 浏览器加载这个页面后,会自动触发表单提交,把包含
id_token的表单数据以POST方式发送到你的应用回调地址。从用户视角看像是被“重定向”过来的,但本质是浏览器主动发起了POST请求,而非标准的3xx重定向。
从你提供的截图也能验证这个逻辑:网络请求记录里会先出现一个来自微软的HTML响应,紧接着就自动发起了POST请求到你的应用回调地址,这就是自动表单提交的结果。
内容的提问来源于stack exchange,提问作者Rango
相关产品推荐
相关产品推荐

