ADFS Server 2016遇MSIS9611错误:不支持授权类型,需实现静默认证
实现ADFS 2016静默认证的步骤
嘿,作为没接触过ADFS的开发者,要搞定静默认证确实有点懵,不过别担心,咱们从代码修改和ADFS配置两个关键部分来梳理:
一、代码层面的修改:强制静默模式
你之前用的PromptBehavior.Auto会在系统判断需要时弹出登录框,要实现静默,直接把它改成PromptBehavior.Never就行——这个参数会告诉ADFS:不要弹出任何界面,要么自动拿到令牌,要么直接失败。
修改后的代码示例:
try { // 替换PromptBehavior.Auto为Never,强制静默获取令牌 var authResult = await ac.AcquireTokenAsync( strAppURI, strClientIdentifier, new Uri(strClientReturnURI), new PlatformParameters(PromptBehavior.Never) ); // 成功获取令牌,继续你的业务逻辑 } catch (AdalException ex) { // 务必处理异常!静默认证失败是很常见的情况 if (ex.ErrorCode == AdalError.FailedToAcquireTokenSilently) { // 这里可以选择回退到弹窗登录,或者给用户提示 // 比如:MessageBox.Show("无法自动登录,请手动登录"); // 或者重新调用带PromptBehavior.Auto的方法 } else { // 处理其他ADAL异常,比如配置错误、网络问题等 Console.WriteLine($"认证失败:{ex.Message}"); } }
二、ADFS服务器端的必要配置
光改代码还不够,ADFS必须允许“Windows集成身份验证(WIA)”才能实现静默传递域凭据,这是核心前提:
启用Intranet区域的Windows身份验证:
打开ADFS管理控制台,依次进入「服务」→「认证方法」,在「Intranet」区域勾选「Windows身份验证」,保存设置。确保应用信任配置正确:
你的应用在ADFS里的信任关系中,必须开启WIA支持。如果是桌面/客户端应用,要把客户端类型设为「公共客户端」;如果是Web应用,要确认重定向URI已正确配置,并且允许WIA作为认证方法。客户端环境要求:
用户必须在加入AD域的机器上操作,并且当前登录的是域账户——只有这样,ADFS才能自动从系统中获取用户的域凭据,实现无感知认证。
关键注意事项
静默认证不是100%能成功的:如果用户不在域机器上、没有缓存的令牌,或者ADFS配置有问题,都会抛出FailedToAcquireTokenSilently异常。所以你的代码一定要做好异常处理,不能直接依赖静默成功,否则会导致程序崩溃。
内容的提问来源于stack exchange,提问作者JoeyD
相关产品推荐
相关产品推荐

