为什么要使用基于声明的身份验证而不是基于角色的身份验证?

13

我对基于声明的认证(Claim-based Authentication)不太了解。我已经看过几篇文章,但无法弄清楚基于声明的认证的确切用途。以下是我对基于声明的认证存在的一些疑问:

  1. 请问基于声明的认证与基于角色的认证相比有什么区别和优势?
  2. 我们可以使用基于声明的认证来连接到 SQL Server 2008 R2 而不是使用 ADFS 吗?如果可以,怎么做呢?
  3. 在 WCF 中使用基于声明的认证有什么好处?

能否有人给出一些解释,以便我理解基于声明的认证并将其应用于我的应用程序中?


1
一般来说,https://dev59.com/v2w15IYBdhLWcg3wLIk2 的答案可能会有所帮助。请注意,安全令牌可以包含声明“此用户具有角色R”,应用程序可以使用该声明进行基于角色的授权。 - MarnixKlooster ReinstateMonica
2个回答

8

此外-声明与认证无关。

没有所谓的基于声明或角色的认证。它是关于以你的应用程序可以处理的方式建模身份。

角色也是声明(具有固定的真/假值)-声明只是使用键/值对更加表达。


6
最终使用声明的主要好处包括:
  1. 为您的服务提供一致的编程模型- 您不需要知道如何实现特定的安全机制,一个站点可能使用用户名和密码进行身份验证/授权,另一个站点可能使用Active Directory。 您的服务无论如何都不关心,因为您只是在所有情况下处理声明。
  2. 您无需关注安全实现。 这由第三方完成。
  3. 您可以自定义声明以适应您的域,并将它们视为授权逻辑的扩展 - 标准安全属性通常仅为您提供基本信息,例如角色。 当然,您可以进行扩展,但这样做会增加更多工作并且往往难以实现(例如,扩展AD通常不是技术挑战,而是策略约束-管理员不愿修改AD架构以适应特定应用程序)。
  4. 可互操作-因为声明[格式]基于标准,所以在不同语言和域的服务之间,它们变得更加可互操作,因为安全的基础技术被抽象化。

如果您正在创建新的.NET 4.5 WCF服务,则可以开始使用声明,因为命名空间向后兼容早期的安全实现,因此即使您现在决定声明不适合您,您以后也会更好地升级。

声明比我在此处写的要复杂得多,我相信还会有其他人提供额外的原因来考虑使用声明。

希望这有所帮助。


嗨,Stephenl,感谢您的帮助。我有一个疑问。是否可以使用基于声明的身份验证而不是ADFS连接到Sql Server 2008 R2?您能否多讲一些关于这个的内容? - Sujith S Nair
ADFS2可以使用几乎任何管理身份验证/授权的数据源(如SQL Server、AD、XML...)。搜索ADFS2将提供更多详细信息。无论哪种方式,实施类似于这样的东西都需要一些计划,并且最有可能需要您的系统管理员参与。 - stephenl
@stephenl 这并不完全正确:AD FS 2.0仅对Active Directory进行身份验证(请参见https://dev59.com/iFLTa4cB1Zd3GeqPY0f8#4938662),但它可以从许多来源创建声明。 - MarnixKlooster ReinstateMonica
@MarnixKlooster 我原本以为如果你有 SQL Membership 提供程序数据库,你也可以使用它,但如果不是这种情况,我会纠正自己的。我只是试图说明可以从多个来源创建声明。 - stephenl
感谢大家的回复。我想知道是否可以在没有ADFS的情况下创建STS。也就是说,是否可以借助SQL Server数据库创建STS。这种情况是否可行?如果是,请提供一些指导方针。 - Sujith S Nair
@sujith 请看一下这个网站 http://startersts.codeplex.com/ 它应该符合你的需求。 - stephenl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接