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

aYu*_*Yus 4 .net security authentication claims-based-identity sharepoint-2010

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

在此先感谢您的帮助.

Eug*_*ace 5

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

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

与此方法相比较的另一个方面是STS中的知识维护.您需要保留一组相当大的规则来发布可能经常更改的这些声明.

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

通常,"许可"声明的最大优点是授权管理器可以写入:

if( PrincipalContainsDocumentClaim( documentYouAreTryingToOpen )
  ShowDocument(documentYouAreTryingToOpen );
else
  AccessDenied(documentYouAreTryingToOpen );
Run Code Online (Sandbox Code Playgroud)

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

bool HasAccess( IPrincipal p, string document )
Run Code Online (Sandbox Code Playgroud)

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

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