在基于声明的应用中应用自定义声明

时间:2010-09-07 19:22:04

标签: .net security authentication sharepoint-2010 claims-based-identity

我想根据基于声明的网站中的自定义声明授予文档级权限。用户可能有数百个文档或一个。应用自定义声明是一个好主意吗?有什么优点或缺点?可以添加到声明集中的声明数量是否有限制?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

尽管有可能,但保持索赔“粗粒度”通常是一个好主意。默认情况下,在Web应用程序中,声明集将在每个请求上来回发送(因为它在cookie中被序列化),因此您将有一个可能相当大的有效负载通过网络。

您可以通过将WIF配置为使用“会话”而不是cookie来覆盖它,但是......您将获得服务器端会话的所有缺点(例如,WebFarms的配置,关联性等)

与此方法相比,另一件事是STS中的知识维护。您需要保留一套相当大的规则来发布可能经常更改的这些声明。

您绝对不希望所有这些都在中央基础架构STS中,因为它将成为潜在大型应用程序集的瓶颈。因此,您最终会将所有这些逻辑放入RP-STS(以及与您的应用程序关联的STS)。并非不可能,但可能不方便。

通常情况下,“许可”声明的最大优点是授权经理可以写作:

if( PrincipalContainsDocumentClaim( documentYouAreTryingToOpen )
  ShowDocument(documentYouAreTryingToOpen );
else
  AccessDenied(documentYouAreTryingToOpen );

我认为更好的方法是让一位能够回答问题的授权经理:

bool HasAccess( IPrincipal p, string document )

在该组件中,您将使用声明集来决定用户是否具有访问权限。该逻辑可能包括将角色,用户名称以及其他“更高阶”声明(例如您所属的组织,您所在的国家/地区等)映射到权限中。

“权限声明”的另一个问题是,如果您进行更改(例如,您授予对登录用户的访问权限),您如何刷新声明集?你必须注销登录,这通常不是一个很好的用户体验。