ADFS 3.0 和非声明感知应用程序、身份验证问题

Posted

技术标签:

【中文标题】ADFS 3.0 和非声明感知应用程序、身份验证问题【英文标题】:ADFS 3.0 and non-claims aware application, authentication issues 【发布时间】:2015-06-28 05:57:08 【问题描述】:

我们正在尝试联合我们的应用程序,以便我们的客户可以使用他们各自的公司身份(Ping 身份或他们的 ADFS 服务器)访问我们的应用程序。

Web 应用程序不支持声明,我们正在尝试找出一种解决方案,在不更改代码的情况下联合它。

按照我的实验室环境,我使用 windows server 2012 R2 构建了一个 ADFS 3.0 环境来模拟未来场景:

我们这边:

1 个 Active Directory 服务器(域 B) 1 IIS8 Web 服务器与我们的非声明感知应用程序(Kerberos 机制支持的 Windows 集成身份验证)加入域 B 1 个 ADFS 3.0 服务器(服务提供商)加入域 B 1 个 WAP 服务器加入域 B

客户方面:

1 个活动目录(域A) 1 个 ADFS 3.0 服务器(身份提供程序)加入 domainA

应用用户:

域B\user1 域A\user2

我按照以下步骤构建了我的实验室环境:

    在 domainB 上安装和配置 ADFS 3.0 在 domainB 上安装和配置 WAP 服务器 在 domainB 上的 WAP 服务器上发布 ADFS 3.0 创建一个非声明感知依赖方信任指向域 B 上 ADFS 3.0 上的应用程序 将非声明感知发布到域 B 上的 WAP 在 domainA 上安装和配置 ADFS 3.0 信任 domainB 上的 ADFS 3.0 和 domainB 上的 ADFS 3.0 编辑每个联合服务器上的声明规则

“domainB\user1”访问应用程序没有问题,在我的WAP服务器中有以下事件:

Web 应用程序代理代表用户成功检索了 Kerberos 票证。

Web 应用程序代理收到带有有效边缘令牌的 HTTP 请求。

“domainA\user2”无法访问并在屏幕上出现服务器错误,在 WAP 事件查看器中出现以下错误:

警告:事件 ID 13019 由于以下一般 API 错误,Web 应用程序代理无法代表用户检索 Kerberos 票证:用户名或密码不正确。 (0x8007052e)。

错误:事件 ID 12027 Web 应用程序代理在处理请求时遇到意外错误。 错误:用户名或密码不正确。 (0x8007052e)。

似乎是 Kerberos 身份验证的问题,但 domainB\user1 访问应用程序没有问题。

需要了解:

问题出在哪里? 只有 Web 应用程序服务器的同一域的用户成员支持访问非声明感知应用程序

我花了很多天来找出原因。 欣赏这里的任何方向。 谢谢

【问题讨论】:

【参考方案1】:

鉴于“非声明感知”应用使 WAP+ADFS 使用 WIA,而 WIA 需要 Kerberos,您需要在 WAP-B 上为“domainA\user2”颁发 Kerberos 令牌,这又需要设置域/林domainA 和 domainB 之间的信任(至少 domainB 应该信任 domainA)。我没有看到域级别的信任,只有 ADFS 级别,因此 Kerberos 域 domainB 说“未知用户 domainA\user2”。检查在 domainA 和 domainB 之间启用信任是否可以解决问题。

【讨论】:

【参考方案2】:

对于将访问应用程序的域 A 中的用户,您需要域 B 中的 Kerberos 影子主体。 Azure B2B 来宾用户通过 azure 应用程序代理访问应用程序的情况类似。这是使用 Azure 同步进行设置的演练 (https://docs.microsoft.com/en-us/azure/active-directory/b2b/hybrid-cloud-to-on-premises)。对于您的情况,情况类似,只是您需要从他们的目录中复制用户。

【讨论】:

以上是关于ADFS 3.0 和非声明感知应用程序、身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章

Office 365 身份验证和单一登录部署

Spring Security SAML Extension 将 ADFS 3.0 与其他声明提供程序集成

ID4 ADFS 3.0 和 oidc-client (vue spa) - 回调实现

在 ASP.Net 应用程序上结合 ADFS 身份验证和 JWT 承载

MVC 5、WIF (System.IdentityModel) 和 ADFS 未实际进行身份验证,联合注销时出错

使用 ADFS 对 ASP.NET Web Api 进行身份验证