.net - 在基于声明的应用程序中应用自定义声明

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

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

在此先感谢您的帮助。

最佳答案

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

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

使用这种方法的另一件事是在 STS 中维护这些知识。您将需要保留一组相当大的规则来发布这些可能经常更改的声明。

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

通常,“权限”声明的最大优点是授权管理器编写起来很繁琐:

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

我认为更好的方法是拥有一个能够回答以下问题的授权管理器:
bool HasAccess( IPrincipal p, string document )

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

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

关于.net - 在基于声明的应用程序中应用自定义声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661960/

相关文章:

c# - Xamarin Forms键盘剩余,甚至编辑器也不可见(如何等待其他任务线程完成?)

c# - 如何通过 Google 方式找出可能的中间人?

authentication - 使用 SSL 证书验证我网站上的用户身份

authentication - ASP.Net Core、Angular2 和基于 token 的身份验证

authentication - Swift - Parse.Com - 登录 - 'selector' 未找到

.net - 如何定义接口(interface)成员的固定部分

c# - IEnumerator IEnumerable vb 到 C#

c# - 为什么我的图像被另一个进程锁定?

c# - 确保我的 C# 桌面应用程序正在向我的 ASP .NET MVC 操作发出请求?

linux - 如何为私有(private)项目宿主搭建高效灵活的安全层