4

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

在此先感谢您的帮助。

4

1 回答 1

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 )

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

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

于 2010-09-10T12:43:26.360 回答