如何在Postman中使用SAML测试集成Okta IDP的Spring Boot项目服务?
Postman对接SAML(Okta作为IDP)测试Spring Boot服务的实操指南
前置校验项
- 先确认项目端SAML认证的凭据流转逻辑:Spring Security SAML默认是ACS端点验证通过SAML断言后,种本地
JSESSIONID会话Cookie;如果你的项目改造过,是SAML断言直接换Bearer Token,要对应调整后续取凭据的逻辑 - 核对Okta应用的配置:确认IDP发起、SP发起的SSO开关是打开的,ACS端点的域名、路径和你项目里配置的SP元数据完全一致,没有域名拼写错误
实操步骤(两种可用方案)
方案1:跟随重定向流自动获取凭据(和真实用户访问逻辑完全对齐,推荐)
- 打开Postman,先不要直接填你要测试的对外API地址,先填一个被项目SAML过滤器拦截的受保护入口路径,发送GET请求
- 确保Postman全局设置开启了自动跟随重定向,最大重定向次数设置为10,此时请求会顺着302跳转链走到Okta的登录页,自动弹出Postman内置浏览器窗口
- 在弹出的浏览器窗口里正常完成Okta的账号校验、MFA验证流程,等待整个跳转链走完:Okta会将编码后的SAML Response POST回你项目的ACS端点,ACS端验签通过后会下发会话Cookie,Postman的内置Cookie管理器会自动留存这个凭据
- 切换到你要测试的对外服务API请求,确认Cookie作用域覆盖项目域名,直接发送请求即可,此时SAML会话过滤器会自动校验Cookie的合法性,完成鉴权流程
方案2:手动注入SAML断言换会话(适合无UI交互的自动化测试场景)
- 提前通过正常浏览器登录Okta,触发IDP发起的SSO跳转到你的项目,抓包拿到POST到ACS端点的完整表单参数,包含Base64编码的
SAMLResponse、RelayState两个字段,不要修改任何编码内容 - 在Postman新建POST请求,地址填写项目的ACS端点路径(Spring Security SAML默认路径为
/saml/SSO),请求体类型选x-www-form-urlencoded,填入刚才抓到的两个参数值 - 发送这个请求,ACS端校验完SAML断言的签名、时效、受众匹配度后,会在响应头返回
Set-Cookie字段,把这个Cookie值复制到你要测试的API请求的鉴权配置里,即可完成带鉴权的测试
常见踩坑点
- 绝对不要手动拼接、修改SAML断言内容:SAML断言是带IDP端数字签名的,哪怕修改一个字符都会导致验签失败,直接返回401
- 注意SAML断言的时效:从Okta抓到的
SAMLResponse默认有效期通常只有5分钟,超时后必须重新获取新的断言,否则换会话时会报断言过期 - 本地测试注意host配置:如果Okta侧绑定的ACS地址不是
localhost,需要在本地host文件把对应域名指向127.0.0.1,不然会因为受众不匹配导致验签失败 - 如果遇到CSRF校验报错,确认你在POST ACS请求时,项目端的CSRF配置是对SAML端点放行的,不要强制要求CSRF Token
内容的提问来源于stack exchange,提问作者Vaibh Manchanda
相关产品推荐
相关产品推荐

