ADFS 2022在SSO流程中不响应OIDC令牌请求的排查求助
我正在为SMA Technologies的OpCon Web UI配置ADFS 2022 SSO应用组,该工具无ADFS专属文档,只能选择“其他”提供商选项。我们采用ADFS的“Web浏览器访问Web应用”应用组类型建立连接,但OAuth/OpenID Connect流程中,OpCon请求Access Token时ADFS无响应,OpCon报错:Sign in via SSO failed, Failed to fetch。
流程细节
- OpCon向ADFS授权端点发起请求:
https://adfsserver/adfs/oauth2/authorize/
请求参数:
<client_id>CLIENTIDUID</client_id> <redirect_uri>https://opconserver/login/callback</redirect_uri> <response_type>code</response_type> <scope>openid</scope> <state>32CHARACTERSTATESTRING</state> <code_challenge>43CHARACTERCODECHALLENGE</code_challenge> <code_challenge_method>S256</code_challenge_method>
- ADFS正常响应,向OpCon回调地址返回授权码:
<code>734CHARACTERCODEATTRIBUTESTRING</code> <state>32CHARACTERSTATESTRING</state>
- OpCon携带授权码向ADFS令牌端点请求:
https://adfsserver/adfs/oauth2/token/
请求参数:
<client_id>CLIENTIDUID</client_id> <code>734CHARACTERCODEATTRIBUTESTRING</code> <code_verifier>96CHARACTERCODEVERIFIERSTRING</code_verifier> <grant_type>authorization_code</grant_type> <redirect_uri>https://opconserver/login/callback</redirect_uri>
此时ADFS无任何响应,核心疑问:如何让ADFS响应令牌请求?是否需额外启用PKCE相关配置?已知ADFS 2019已支持PKCE,理论上2022可直接使用。
排查与解决步骤
验证ADFS应用组的PKCE配置
虽然ADFS 2019+原生支持PKCE,但需确保应用组的OAuth设置已明确启用:- 打开ADFS管理控制台,找到目标应用组的“Web浏览器访问”应用
- 进入「属性」→「高级」标签,确认要求使用PKCE选项已勾选
- 启用后重启ADFS服务
检查令牌请求的参数格式
ADFS令牌端点仅接受application/x-www-form-urlencoded格式的参数(如client_id=CLIENTIDUID&code=xxx&...),而非XML标签包裹的格式。需确认OpCon是否按表单编码格式发送令牌请求。验证授权码有效性
授权码默认有效期为5分钟,若OpCon获取授权码后延迟过久发送令牌请求,授权码会失效。可缩短流程测试,或通过PowerShell调整有效期:Set-AdfsProperties -AuthorizationCodeLifetime <分钟数>查看ADFS日志定位错误
检查Windows日志→应用程序和服务日志→AD FS→Admin日志,令牌请求阶段的错误条目会给出具体失败原因(如PKCE验证失败、参数错误、客户端权限不足等)。确认客户端类型配置
在ADFS应用属性中,将客户端类型设为公共客户端(OpCon Web UI属于浏览器端应用,无客户端密钥)。若误设为机密客户端,ADFS会要求提供密钥,导致请求失败。
内容的提问来源于stack exchange,提问作者CitizenRon

