C#学习之路-安全性认识

安全性的两个基本支柱是身份验证和授权。身份验证是标识用户的过程,授权是在验证了所标识用户是否可以访问特定资源之后进行的。
使用标识可以验证运行应用程序的用户。
principal是一个包含用户的标识和用户的所属角色的对象。IPrincipal接口定义了Identity属性和IsInRole()方法。Identity属性返回IIdentity对象;在IsInRole()方法中,可以验证用户是否制定角色的一个成员。
角色是有相同安全权限的用户集合,同时他是用户的管理单元。角色可以是Windows组或自己定义的一个字符串集合。
 AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
            var principal = WindowsPrincipal.Current as WindowsPrincipal;
            var identity = principal.Identity as WindowsIdentity;
            Console.WriteLine("IdentityType:{0}",identity);
            Console.WriteLine("Name:{0}", identity.Name.ToString());
            Console.WriteLine("Users:{0}",principal.IsInRole(WindowsBuiltInRole.User));
            Console.WriteLine("IsAdmin:{0}", principal.IsInRole(WindowsBuiltInRole.Administrator));
            Console.WriteLine("IsAuthenticated:{0}", identity.IsAuthenticated.ToString());
            Console.WriteLine("AuthenticationType:{0}", identity.AuthenticationType);
            Console.WriteLine("IsAnonymous:{0}", identity.IsAnonymous);
            Console.WriteLine("Token:{0}", identity.Token.ToString());
            Console.ReadLine();
利用角色和Windows用户组,管理员可以完成使用标准用户管理工具所完成的工作,这样,在用户角色改变时,通常可以避免更改代码。


基于角色的安全性可以很好的解决资源的访问问题。
基于角色的安全性最好也与Windows账户或自定义用户目录一起使用,以便于管理基于Web的资源的访问权限。
声明基于角色的安全性              [PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN/Administrators")]
该特性的作用是检查调用者身份,如果调用者是BUILTIN/Administrators组的成员没有问题,否则会获得一个安全异常:“请求主体权限失败”。
除了使用角色之外,还可以使用声称访问用户的信息。声称与实体相关,描述了实体能力。实体通常是用户,也可以是应用程序。能力描述了实体允许执行的操作。这比角色模型灵活。
 foreach (var c in principal.Claims)
            {
                Console.WriteLine("Role:{0}", c.Value.ToString());
                Console.WriteLine("Subject:{0}", c.Subject.ToString());
                Console.WriteLine("Issuer:{0}", c.Issuer.ToString());
                Console.WriteLine("OriginalIssuer:{0}", c.OriginalIssuer.ToString());
                Console.WriteLine("Type:{0}", c.Type.ToString());
                Console.WriteLine("ValueType:{0}", c.ValueType.ToString());
            }

你可能感兴趣的:(C#学习笔记)