问题标签 [federated-identity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9488 浏览

wcf-security - 实现基于声明的安全性 (WCF/ASP.NET)

在研究了基于声明的安全(或联合安全模型)的主题之后。我遇到过许多使用CardSpace作为示例的示例。我读到的主要文章对这个主题给出了很好的解释,它是Microsoft 在一个名为Zermatt的框架上编写的PDF

我正在研究的基于声明的安全架构相当于实现STS身份验证代理和 STS 授权代理。这样,当我创建一个新服务时,我需要做的就是确保该服务只接受授权代理发出的声明。正如文章中所指出的,授权代理将只接受身份验证代理发出的声明。

设置完成后,任何时候客户端尝试使用新服务,它都必须通过Authentication Broker 进行身份验证(发出经过身份验证的声明),然后通过 Authorization Broker 获得授权(发出经过授权的声明)

这一切都很好,而且架构很清晰,但我不知道如何实现 STS。正如我所提到的,网络上的大多数(如果不是全部)示例都展示了如何使用 CardSpace,但是当您有一个数据库备份您的身份验证方案时,这并不完全有效。

示例场景

替代文字 http://img512.imageshack.us/img512/8329/claimsbasedsecurityza6.jpg

0 投票
2 回答
252 浏览

security - 在合作伙伴公司的 Active Directory 实例之间建立信任关系是否有意义?

如果公司经常要求在合作伙伴的活动目录中创建用户,反之亦然,那么在 AD 实例之间建立联合/信任关系是否有意义?如果是这样,应该考虑什么?合作伙伴 AD 中用户的 ACL 是否仍以相同方式工作?这会暴露哪些安全风险?

谢谢!

K A

更新:

我了解到,通过让应用程序本身检查用户存储,有一种更好的方法可以做到这一点。最好的方法是将应用程序移动到两个用户存储都信任的域中。我在下面的答案中提供了更多详细信息。

0 投票
2 回答
2401 浏览

federated-identity - 使用日内瓦框架创建本地令牌缓存

还没有看到很多与日内瓦相关的问题,我也在日内瓦论坛上发布了这个问题......

我正在处理一个场景,我们有一个具有广泛安装基础的 win forms 应用程序,它将在整个操作过程中对我们集中托管的各种服务发出频繁的调用。

这些服务都使用日内瓦框架,所有客户都应该首先调用我们的 STS 以获取令牌以允许访问服务。

开箱即用,使用 ws2007FederationHttpBinding,可以将应用程序配置为在每次服务调用之前从 STS 检索令牌,但显然这不是最有效的方式,因为我们几乎重复了调用服务的工作。

或者,我已经实现了从应用程序“手动”检索令牌所需的代码,然后在对服务调用操作时传递相同的预检索令牌(基于 WSTrustClient 示例和论坛上的帮助);效果很好,所以我们确实有一个解决方案,但我认为它不是很优雅,因为它需要在代码中构建 WCF 通道,远离美妙的 WCF 配置。

我更喜欢 ws2007FederationHttpBinding 方法,在这种方法中,客户端只需像任何其他 WCF 服务一样调用该服务,而无需了解有关日内瓦的任何信息,并且绑定负责令牌交换。

然后有人(乔恩辛普森)给了我 [我认为是] 一个好主意 - 添加一个服务,托管在应用程序本身中以缓存本地检索到的令牌。本地缓存服务将执行与 STS 相同的合约;当接收到请求时,它会检查是否存在缓存令牌,如果存在则返回它,否则它将调用“真实”STS,检索新令牌,缓存并返回它。客户端应用程序仍然可以使用 ws2007FederationHttpBinding,但不是将 STS 作为颁发者,而是使用本地缓存;

通过这种方式,我认为我们可以实现两全其美 - 在没有服务特定的自定义代码的情况下缓存令牌;我们的缓存应该能够处理所有 RP 的令牌。

我创建了一个非常简单的原型来看看它是否有效,并且 - 不幸的是有点不足为奇 - 我有点卡住了 -

我的本地服务(当前是控制台应用程序)获取请求,并且 - 第一次 - 调用 STS 以检索令牌,将其缓存并成功将其返回给客户端,随后客户端使用它来调用 RP。一切正常。

然而,第二次,我的本地 cahce 服务尝试再次使用相同的令牌,但客户端失败并出现 MessageSecurityException -

“安全处理器无法在消息中找到安全标头。这可能是因为消息是不安全的错误,或者是因为通信双方之间存在绑定不匹配。如果为安全配置了服务并且客户端是不使用安全性。”

是否有什么东西阻止了同一个令牌被多次使用?我对此表示怀疑,因为当我按照 WSTrustClient 示例重用令牌时,它运行良好;我错过了什么?我的想法可能吗?一个好?

这是本地缓存的(非常基本的,在这个阶段)主要代码位 -

0 投票
1 回答
366 浏览

asp.net - 在被动 STS 的依赖方中指定必需/可选声明类型

我有一个 asp.net 应用程序(依赖方),它使用被动 STS 进行身份验证和检索声明值。依赖方正在使用 FederatedAuthenticationModule (FAM) 来启用到 sts 的被动重定向。我找到了有关如何在使用 InformationCards 时指定所需声明的文档,但尚未找到有关如何使用 FAM 进行配置的详细信息。

有没有人有这方面的例子?我能找到的最接近的例子是在日内瓦框架示例中,但它们处理的是不适用的活动 STS 和 WCF。

提前致谢。

0 投票
1 回答
827 浏览

authorization - 从 ADFS 迁移到日内瓦框架

我的公司需要联合身份解决方案,作为 Microsoft 商店,我们希望使用 MS 技术来实现这一目标。

我们在生产中没有 Server 2008 或 .NET 3.5,因此我们仅限于基于 .NET 2.0/Server 2003 的解决方案。

这意味着(就联合身份解决方案而言)Active Directory 联合服务

ADFS 看起来不错,因为它支持 WS-Federation 标准,这意味着我们可以与不使用 Microsoft 技术的合作伙伴进行联合。

不幸的是(对我们来说),微软即将发布基于 .NET 3.5 的身份框架,即日内瓦框架

日内瓦框架似乎在各方面都优于 ADFS(主要是因为它是 ADFS 加上额外的功能和标准支持)。

由于我们不是 .NET 3.5 商店,并且 Geneva 仅处于测试阶段,因此目前这对我们来说不是一个可行的选择。

我的问题是:我们从 ADFS 搬到日内瓦有多难?

我们正处于 ADFS 的概念验证阶段,因此我们还没有开始深入研究从基于身份的授权转移到基于声明的 ADFS 所需的代码更改。我确信我们可以将这个逻辑放在一个可以更新以支持基于日内瓦声明的身份验证的程序集中。

除了所需的代码更改之外,将我们基于声明的基础架构从 ADFS 迁移到日内瓦会有多困难?(例如从 ADFS 的 STS(联合服务)迁移到日内瓦的 STS(日内瓦服务器))

感谢您对此主题的任何意见,非常感谢!

0 投票
4 回答
2428 浏览

authentication - 开始将 ADFS 与 AzMan 集成的好方法是什么?

有谁知道有关 Active Directory 联合身份验证服务 (ADFS) 与授权管理器 (AzMan) 集成的任何好的截屏视频或文档?

0 投票
6 回答
1492 浏览

asp.net - Web 应用程序 - 跨域用户身份验证

我们的一个客户找我们开发一个应用程序,并且像往常一样,范围日益扩大。

最初,它是作为限制在其公司网络中的专用应用程序开始的。通过获取用户的 Windows 登录名并使用 SQLServer 数据库托管访问权限来建立用户身份验证。一切都很直截了当。

他们现在想要以下内容:
- 基于 Web 的
应用程序 - 在公司网络之外托管的应用程序
- 用户身份验证以相同的方式工作(不使用密码,只使​​用 Windows 登录)

更复杂的是,他们希望应用程序的各种功能能够被另一个只触发 HTTP 请求的应用程序使用。
- 用户登录到企业网络
- 用户启动企业应用程序
- 用户处理客户详细信息
- 用户单击按钮
- 企业应用程序向我们托管的 Web 应用程序发出 HTTP 请求
- HTTP 请求包括必要的身份验证和客户详细信息
- 用户身份验证“自动完成” '(无需人工参与)
- 客户数据安全传输

他们非常渴望我们为他们做这件事,因为我们最初的方法正是他们想要的。即使此类托管网络应用程序不是我们的专长,他们仍然希望我们这样做。所以我现在联系专家;
- 有人对如何解决这个问题有任何建议吗?
- 是否有人对可能要避免的陷阱有任何警告?

0 投票
2 回答
1779 浏览

federated-identity - Simple Claims Transformation for an RP-STS in Geneva Framework

After reading the MSDN article (http://msdn.microsoft.com/en-us/magazine/2009.01.genevests.aspx) on implementing a Custom STS using the Microsoft Geneva Framework I am a bit puzzled about one of the scenarios covered there. This scenario is shown in figure 13 of the above referenced article.

My questions are around how does the RP initiate the call to the RP-STS in order to pass on the already obtained claims from the IP-STS? How does the desired method DeleteOrder() get turned into a Claim Request for the Action claim from the RP-STS which responds with the Action claim with a value Delete which authorizes the call? I also think the figure is slightly incorrect in that the interaction between the RP-STS and the Policy Engine should have the Claims and arrows the other way around.

I can see the structure but it's not clear what is provided by Geneva/WCF and what has to be done in code inside the RP, which would seem a bit odd since we could not protect the DeleteOrder method with a PrincipalPermission demand for the Delete "permission" but would have to demand a Role first then obtain the fine-grained claim of the Delete Action after that point.

If I have missed the point (since I cannot find this case covered easily on the Web), then apologies!

Thanks in advance.

0 投票
2 回答
591 浏览

asp.net-mvc - 使用第三方身份验证的应用程序的密码?

我有一个 ASP.NET MVC 应用程序,我刚刚在其中集成了RPX第三方联合身份系统。集成工作正常,但我在想如何在 ASP.NET 级别处理它时遇到了一些困难。

因为身份是在外部处理的,所以我的应用程序中不需要密码:我从来没有收到用户的密码,只是他们的身份。但是,ASP.NET Membership Provider 需要传递密码才能创建用户、登录用户等。

我一直在考虑new Guid()在创建时使用,但这需要调用数据库以检索用户的密码,然后我才能通过会员提供程序登录用户。我可以为每个用户使用相同的密码,以便提前知道,但我担心这会使我的用户数据不安全。

我很想听听其他网站如何处理这个问题,例如 StackOverflow。

[另请参阅我的另一个问题,关于此类应用程序的会员提供商。]

0 投票
1 回答
1054 浏览

asp.net-mvc - 我是否需要自定义成员资格提供程序才能将第三方身份验证集成到 ASP.NET 中?

我有一个 ASP.NET MVC 应用程序,我刚刚在其中集成了RPX第三方联合身份系统。集成工作正常,但我在想如何在 ASP.NET 级别处理它时遇到了一些困难。

我对 ASP.NET 很陌生(我正在使用 MVC 学习它),并且我发现了一些关于成员资格和配置文件数据的提供者模型,它看起来非常复杂(但同样强大)。我正在努力解决的具体问题是用户对数据库的持久性。到目前为止,我一直在使用标准SqlMembershipProvider实现,效果很好。但是,我现在想做一些事情,例如在数据库中存储和检查验证码以进行电子邮件验证(以防用户的电子邮件地址被 RPX 结果列为未验证),并保留返回的数据。其中一些对于身份验证至关重要,例如电子邮件地址,而其中一些只是个人资料信息(例如用户的年龄、性别等)。

在 ASP.NET 数据库中,我有一堆其他特定于应用程序的表,我通过 NHibernate 与之交互。我对 ASP.NET 中的 Membership/Profile 的理解是它处理持久性,所以我不需要对 NHibernate 做任何事情来实现这一点。

我的目标是让登录体验类似于 StackOverflow 的体验,但有一些额外的部分(例如电子邮件验证)。我是否需要构建一个完整的自定义提供程序来执行此操作,或者SqlMembershipProvider我可以以有效的方式将默认设置更改为我的意愿?

[另请参阅我的另一个问题,关于此类应用程序中的密码。]