联合身份标识:使用WIF实现ASP.NET被动身份验证
联合方案中,只有一个 RP 和一个 IP-STS 负责用户身份验证。如果 IP-STS 针对 Windows 域进行用户身份验证,它可能颁发角色声明,如管理员、用户或来宾。前提是这些角色对于 RP 授权是有意义的。在下一部分中,我假设这些角色是有意义的,然后讨论授权方法。在这之后,我将讨论 RP 声明转换,根据需要将 STS 声明转换为对于授权更加有用的内容。
基于声明的授权 我在以前的文章中提到过,.NET Framework 中基于角色的安全机制要求安全主体附加到每个线程。安全主体(基于 IPrincipal)在 IIdentity 实现中包装经过身份验证的用户的标识。WIF 根据 IClaimsPrincipal 和 IClaimsIdentity(最终由 IPrincipal 和 IIdentity 派生)提供 ClaimsPrincipal 和 ClaimsIdentity 类型。FAM 处理登录响应时,会为已颁发安全令牌创建 ClaimsPrincipal。同样,SAM 也为会话 Cookie 创建 ClaimsPrincipal。此 ClaimsPrincipal 是 ASP.NET 应用程序进行 WIF 授权的核心。 您可以使用以下任何方法进行授权: 使用位置特定的授权设置限制对目录或各应用程序资源的访问。 使用 ASP.NET 登录控件(如 LoginView 控件)控制对功能的访问。 使用 ClaimsPrincipal 执行动态 IsInRole 检查(如动态隐藏或显示 UI 元素)。 使用 PrincipalPermission 类型或 PrincipalPermissionAttribute(如果声明性权限请求看起来适用于某种特定方法)执行动态权限请求。 提供自定义 ClaimsAuthorizationManager,将访问权限检查集中在一个组件中,即使在加载请求的资源之前也不例外。 在上述方法中,前三个需要使用 ClaimsPrincipal 类型公开的 IsInRole 方法。您必须选择一个适合于 IsInRole 检查的角色声明类型,以便使用正确的声明控制访问。WIF 的默认角色声明类型为: http://schemas.microsoft.com/ws/2008/06/identity/claims/role 如果 ClaimsPrincipal 包含定义的声明,则角色声明类型将与默认值匹配。稍后,我将讨论声明转换上下文中的权限声明。使用这些声明时,应将权限声明类型指定为角色声明类型,以便使 IsInRole 生效。 您可以使用 web.config 文件对访问特定页面或特定目录进行全局控制。在应用程序根目录中提供一个位置标记,指定要保护的路径,允许可接受的角色进行访问,拒绝所有其他用户的访问。下面的代码只允许 Administrators 访问 AdminOnly 目录下的文件:
此外,您还可以在任何子目录中放置 web.config,用于指定授权规则。将下面的配置放置到 AdminOnly 目录中,结果是一样的:
要动态隐藏或显示 UI 组件或控制对页面内功能的访问,可以使用基于角色的控件功能(如 LoginView)。但是,大多数开发人员更愿意在页面加载过程中显式设置控件的访问控制属性,以获得更精细的控制。为此,您可以调用 ClaimsPrincipal 公开的 IsInRole 方法。您可以通过 Thread.CurrentPrincipal 静态属性访问当前主体,如下所示:
除了在运行时显式检查 IsInRole |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |