如何在Chrome扩展中集成基于SAML的SSO获取saml_token?
可行实现方案建议
方案1:通过网络请求监听捕获saml_token
- 利用Chrome扩展的
webRequestAPI,监听登录流程中的重定向请求来提取令牌 - 具体步骤:
- 在
manifest.json中声明webRequest、webRequestBlocking权限,同时根据用户输入的application_host动态申请对应主机权限(避免过度申请<all_urls>权限)。 - 用户点击扩展内的SSO按钮时,调用
chrome.tabs.create打开application_host/ssologin页面,触发原生登录流程。 - 在后台脚本中注册
chrome.webRequest.onBeforeRedirect或chrome.webRequest.onCompleted事件,过滤匹配application_host/login?saml_token=*的请求。 - 从请求URL中解析出
saml_token,存储到chrome.storage.local供后续API调用使用。
- 在
方案2:修改应用ACS端点的重定向规则(需应用配置权限)
- 如果能修改目标内部应用的SSO配置,调整ACS端点的最终重定向地址适配Chrome扩展的回调要求
- 具体步骤:
- 在扩展
manifest.json中配置oauth2字段,指定redirect_uri为https://<app-id>.chromiumapp.org/callback,同时声明identity权限。 - 修改应用的SSO配置,将ACS端点处理完成后的重定向URL设置为上述回调地址,并附加
saml_token参数(例如https://<app-id>.chromiumapp.org/callback?saml_token=TOKEN)。 - 使用
chrome.identity.launchWebAuthFlow启动认证流程,传入url为application_host/ssologin,redirect_uri为配置的回调地址。 - 认证完成后,
launchWebAuthFlow会返回携带saml_token的回调URL,解析后即可获取令牌。
- 在扩展
方案3:动态注入内容脚本捕获令牌
- 通过内容脚本注入到最终登录页面,读取URL中的令牌并传递给扩展后台
- 具体步骤:
- 在
manifest.json中声明scripting权限,用于动态注册内容脚本。 - 用户输入
application_host并点击登录按钮后,调用chrome.scripting.registerContentScripts注册匹配application_host/login?saml_token=*的内容脚本。 - 内容脚本解析当前URL的
saml_token参数,通过chrome.runtime.sendMessage发送给后台脚本。 - 后台脚本接收消息后,将令牌存储到扩展本地存储中,同时注销临时注册的内容脚本。
- 在
方案4:弹出窗口监听URL变化捕获令牌
- 在扩展弹出页中打开登录窗口,监听窗口地址变化提取令牌
- 具体步骤:
- 在扩展弹出页(popup.html)中添加登录按钮,点击时用
window.open打开application_host/ssologin页面,保留窗口引用。 - 设置定时器定期检查窗口的
location.href,当检测到URL包含saml_token时,解析参数。 - 获取令牌后关闭窗口,将令牌存储到扩展本地存储中。
- 在扩展弹出页(popup.html)中添加登录按钮,点击时用
- 注意:需要引导用户允许弹出窗口,且需确保扩展拥有目标主机的权限以避免跨域限制。
内容的提问来源于stack exchange,提问作者Het Patel
相关产品推荐
相关产品推荐

