如何在ADFS服务器上通过OpenID Connect获取用户名及id_token验签安全问询
关于未校验HS256签名的ADFS id_token直接使用的安全性问题
首先纠正一个核心认知偏差:JWT的签名校验是接收方的核心安全责任,而非仅发行方的职责。发行方的职责是使用合规密钥对令牌签名,而接收方校验签名是为了确认令牌的发行方合法性、内容未被篡改,这是身份认证链路里不可缺失的一环。
- 跳过签名校验会直接面临两类高危安全风险:
- 身份冒充风险:攻击者可以自行构造JWT结构,将
unique_name字段修改为任意目标用户,甚至伪造权限、有效期等声明,你的服务如果直接读取未校验的令牌内容,会完全认可伪造的身份信息,导致用户越权、数据泄露等严重问题 - 篡改攻击风险:哪怕令牌最初是从ADFS合法获取的,如果令牌在传输、跨服务传递过程中被第三方拦截修改,未校验签名的情况下你完全无法感知内容被篡改
- 身份冒充风险:攻击者可以自行构造JWT结构,将
- 针对你提到的不掌握HS256密钥的问题,有两种成熟的解决方案:
- 向ADFS管理员申请该环境下HS256签名所用的对称密钥,拿到密钥即可完成签名校验,不需要额外权限
- 要求ADFS侧将签名算法切换为RS256非对称算法,你直接从ADFS的公开JWKS端点获取公钥即可完成校验,不需要向管理员申请任何敏感密钥
特殊场景补充:如果你的使用场景仅为后台服务通过HTTPS直连ADFS的token endpoint获取令牌,且令牌全程不会流出你的信任服务器、也不会接收任何外部传入的id_token,这种极端场景下可临时跳过校验,但不符合OAuth2/OIDC安全规范,不建议长期使用。
内容的提问来源于stack exchange,提问作者Anaconda
相关产品推荐
相关产品推荐

