我想根据基于声明的网站中的自定义声明授予文档级权限。一个用户可能有数百个文档或一个。应用自定义声明是个好主意吗?有什么优点或缺点?可以添加到声明集中的声明数量是否有限制?
在此先感谢您的帮助。
我想根据基于声明的网站中的自定义声明授予文档级权限。一个用户可能有数百个文档或一个。应用自定义声明是个好主意吗?有什么优点或缺点?可以添加到声明集中的声明数量是否有限制?
在此先感谢您的帮助。
即使有可能,保持声明“粗略”通常是一个好主意。默认情况下,在 Web 应用程序中,声明集将在每个请求上来回发送(因为它在 cookie 中序列化),因此您将有一个潜在的相当大的有效负载通过网络。
您可以通过将 WIF 配置为使用“会话”而不是 cookie 来覆盖它,但是……您会得到服务器端会话的所有缺点(例如 WebFarms 的配置、亲和力等)
使用这种方法要考虑的另一件事是在 STS 中维护该知识。您将需要保留一组相当大的规则来发布这些可能经常更改的声明。
您绝对不希望将所有这些都放在中央基础设施 STS 中,因为它将成为潜在的大量应用程序的瓶颈。因此,您最终会将所有这些逻辑放入 RP-STS(以及与您的应用程序关联的 STS)中。并非不可能,但可能不方便。
通常,“权限”声明的最大优点是授权管理器很难编写:
if( PrincipalContainsDocumentClaim( documentYouAreTryingToOpen )
ShowDocument(documentYouAreTryingToOpen );
else
AccessDenied(documentYouAreTryingToOpen );
我认为更好的方法是让授权经理能够回答以下问题:
bool HasAccess( IPrincipal p, string document )
在该组件中,您将使用声明集来决定用户是否有权访问。该逻辑可能包括将角色、用户名和其他“更高阶”声明(例如,您所属的组织、您所在的国家/地区等)映射到权限。
“权限声明”的另一个问题是,如果您进行更改(例如,您授予登录用户访问权限),您如何刷新声明集?您必须注销登录,这通常不是很好的用户体验。