You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义SSO应用中通过ADFS对用户凭据进行认证?

我来帮你梳理下在自建SSO应用中对接ADFS完成用户凭据认证的关键步骤和常见问题解决思路:

自建SSO对接ADFS完成凭据认证的实现方案

1. 先搞定ADFS与SSO应用的信任基础配置

  • 第一步得在ADFS服务器上给你的SSO应用创建信赖方信任:设置唯一的标识符(比如你的SSO应用域名),并配置允许访问的用户范围(比如全组织用户或指定组)。
  • 接着在信赖方信任的「终结点」设置里,添加WS-Federation类型的终结点,地址填你的SSO应用用来接收ADFS认证断言的回调路径(比如/adfs-auth-callback)。
  • 导出ADFS的元数据文件(路径一般是https://<你的ADFS域名>/FederationMetadata/2007-06/FederationMetadata.xml),在SSO应用里导入这个文件,确保能正确解析ADFS的公钥和各类端点信息。

2. 在SSO应用中发起ADFS的用户名密码认证请求

当用户在SSO登录页输入账号密码后,不要本地校验,而是直接调用ADFS的用户名密码认证端点(通常是https://<你的ADFS域名>/adfs/services/trust/13/usernamemixed)发起认证:

  • 你可以用Microsoft.IdentityModel.Protocols.WsFederation或System.IdentityModel.Services库来简化请求构造,示例代码大概是这样:
// 构造WS-Trust认证请求
var authRequest = new UsernamePasswordWsTrustRequestMessage(
    new Uri("https://<你的ADFS域名>/adfs/services/trust/13/usernamemixed"),
    "<你的SSO应用信赖方标识符>")
{
    Username = inputUsername,
    Password = inputPassword
};

// 创建通道并发起请求
var channelFactory = new WsTrustChannelFactory(
    new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
    new EndpointAddress("https://<你的ADFS域名>/adfs/services/trust/13/usernamemixed"));
channelFactory.Credentials.UserName.UserName = inputUsername;
channelFactory.Credentials.UserName.Password = inputPassword;

var channel = channelFactory.CreateChannel();
var securityToken = channel.Issue(authRequest) as GenericXmlSecurityToken;

3. 处理ADFS返回的令牌并完成SSO流程

  • 首先验证ADFS返回令牌的签名:用之前导入的ADFS公钥校验,防止伪造令牌。
  • 从令牌中提取用户的核心身份信息,比如UPN、角色、部门等。
  • 在你的SSO应用中创建用户会话,然后生成针对example.com的WS-Federation断言,最后重定向回example.com的Login Controller,完成整个单点登录流程。

4. 常见问题排查技巧

  • 令牌验证失败:检查ADFS元数据是否正确导入,公钥是否匹配;确认信赖方信任的标识符和请求中传入的完全一致。
  • ADFS拒绝认证请求:去ADFS服务器的事件日志里找线索(Windows事件查看器→应用程序和服务日志→AD FS→Admin),日志里会明确给出原因,比如密码错误、用户无访问权限、端点配置错误等。
  • 回调路径不匹配:确保SSO应用的回调终结点和ADFS信赖方信任中配置的完全一致,包括HTTP/HTTPS协议和完整路径。

内容的提问来源于stack exchange,提问作者Aakesh Singh Tomar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:56:50