3

Q1 – 原生UrlAuthorizationModule 不理解角色的原因是角色信息存储在实现IPrincipal接口的托管对象中,而原生模块无法访问这些对象。

A)但是,如果本机UrlAuthorizationModule理解身份验证票证,因此可以与FormsAuthenticationModule一起使用,那么为什么它不能与 Roles 模块一起使用?

也就是说,这张票不是还包含有关用户所在角色的信息吗?如果是这样,那么UrlAuthorizationModule可以从票证中获取有关角色的所有信息,因此不需要访问IPrincipal对象?!


Q2 以下文章http://www.asp.net/learn/security/tutorial-11-vb.aspx声称:

如果匿名用户访问该站点,FormsAuthenticationModuleRoleManagerModule都不会创建主体对象。


A)如果上述声明为真,那么下面的代码不会抛出异常,因为User属性将包含一个空引用:

        if (User.Identity.IsAuthenticated)
            Label1.Text = "user is authenticated";
        else Label1.Text = "user is not authenticated";

Label1显示“<em>User is not authenticated”,这表明User属性被分配了实现IPrincipal的对象,即使用户没有经过身份验证?!


谢谢

4

1 回答 1

2

关于 Q1:如果 CacheRolesInCookie 设置为 false,那么将没有足够的信息来确定角色。

关于 Q2:引用http://msdn.microsoft.com/en-us/library/aa302376.aspx

“激活的身份验证模块负责创建 IPrincipal 对象并将其存储在 HttpContext.User 属性中。这至关重要,因为下游授权模块使用此 IPrincipal 对象来做出授权决策。在没有身份验证的情况下(例如,在 IIS 中启用匿名访问并且 ASP.NET 配置为 ),有一个特殊的未配置模块将默认匿名主体放入 HttpContext.User 属性。因此,HttpContext.User 在身份验证后始终为非空。”

于 2009-05-22T09:49:10.300 回答