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 和非声明感知应用程序、身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security SAML Extension 将 ADFS 3.0 与其他声明提供程序集成
ID4 ADFS 3.0 和 oidc-client (vue spa) - 回调实现
在 ASP.Net 应用程序上结合 ADFS 身份验证和 JWT 承载