.NET (ADFS / WIF) 和 Java (Federation) 之间的属性如何映射

Posted

技术标签:

【中文标题】.NET (ADFS / WIF) 和 Java (Federation) 之间的属性如何映射【英文标题】:How are attributes mapped between .NET (ADFS / WIF) and Java (Federation) 【发布时间】:2011-03-13 22:20:48 【问题描述】:

假设有两家公司:A.NET 是一家 .NET 商店,B.Java 是一家 Java 商店。 每家公司的用户都需要访问另一家公司的网站,因此两家公司使用 ADFS 和 Oracle 身份联合或 OpenSSO 联合来建立联合。

在 .NET 世界中,属性作为 IClaimsPrincipal 和 IClaimsIdentity 中的声明进行访问。

在 Java 世界中,属性作为 HTTP 标头访问。

联邦基础设施是否自动执行此映射,即

如果 A.NET 用户访问 B.Java 站点,他们是否将其属性作为声明?

如果 B.Java 用户访问 A.NET 站点,他们是否将其属性作为标题获取?

【问题讨论】:

【参考方案1】:

假设您可以在双方都使用 WS-Federation,那么在这两种情况下,您要处理的主要工件都是 SAML 令牌。

通常,您的联合基础架构完全独立于应用程序堆栈。在任何一种情况下,ADFS 都会颁发 SAML 令牌(对于 Java 应用程序和 .NET 应用程序)。 OIF 还必须为两组用户颁发 SAML 令牌。

在 .NET 世界中,WIF 将 SAML 令牌解析/验证等方式转换为 .NET 对象模型,该模型表示其中的信息(声明、颁发者等)。该对象模型是 ClaimsPrincipal(以及所有相关的接口和类型)。您将不得不查看 java 世界上的 WIF 等价物。但无论哪种情况,输入都是 SAML 令牌。

在您的场景中,两个 STS 中都可能存在令牌转换:

对于 .NET 应用程序:

1- B 公司的用户在 OIF 上进行身份验证并获得 A 公司的 SAML 令牌 2- 用户将令牌发送到 ADFS 3- ADFS 从 B 读取令牌,验证并发出新令牌(可能且很可能添加/转换/删除声明) 4- 用户将转换后的令牌发送到应用 A

A 中的用户访问 B 上的 java 应用程序的顺序完全相同。请注意,在这种情况下存在双向信任(A 公司信任 B 的发行人,反之亦然)

【讨论】:

以上是关于.NET (ADFS / WIF) 和 Java (Federation) 之间的属性如何映射的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 ADFS2 作为 IP 使用 WIF 保护后端 WCF 服务

ADFS 和 ASP.NET

使用 WIF 和 jquery ajax 请求时 ASP.NET MVC 3 中的会话 Cookie 过期处理

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

使用WIF,audienceUris和realm有啥区别?