zoukankan      html  css  js  c++  java
  • 授权(Authentication)


    http://www.microsoft.com/taiwan/msdn/library/2003/dec-2003/vbnet10282003.htm

    http://www.cnblogs.com/steeven/archive/2004/03/18/3523.aspx

    一般概念:
    1。初始化整个AppDomain的Principal策略(ASP.NET中策略由webconfig决定;更改无效;):
            AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);
       有时候需要(但一般不需要,并且多次调用会产生Exception):
       初始化整个AppDomain的Principal:
            AppDomain.CurrentDomain.SetTreadPrincipal();
    2。初始化Principal:
                    new Identity();
                    new Principal();          
                    Thread.CurrentPrincipal = myPrincipal;
        3。Principal的两个: Identity;
                             IsInRole();
        4。Identity的属性:  Name;
                             AuthenticationType;
                             IsAuthenticated;——一旦给Identity赋值了Name和AuthenticationType,该属性就为true;否则为false;

    Login步骤:
    1。检验uid;pwd;
    2。正确,则初始化Identity(Name,AuthenticationType——则此时IsAuthenticated=true),和Principal;
    3。错误,也初始化Identity(Name="",AuthenticationType=""——则此时IsAuthenticated=false),和Principal;
    4。if(Identity.IsAuthenticated)
       {
            Principal.IsInRole();// 判断用户角色;
       }

    分类:
       WebForm:
            Forms认证:
                    设置web.config中认证方式为:Forms;及loginURL;
                            我想过程可能是这样的:每次请求一个页面,aspnet_isapi都会检查Identity.IsAuthenticated属性;
                                                  为True,允许用户访问页面资源;False,定向到loginURL页面;
                                                  所以Login的角色相当于Windows自己的验证,只不过是给Identity初始化;
                            但是,这是错误的:aspnet_isapi不会检查Identity.IsAuthenticated属性;这个属性只有自己的代码来检查;
                                              相当于开发人员有三种编码依据:Name、Type、Role;据此判断流程;
                            所以重要的一点就是保存用户的Principal(即HttpContex.Current.User),可以用Cookie;或缓存(是否能行??);
                    设置IIS-安全性-匿名访问;
                    写Login代码,分两步:
                            一。验证UID、PWD,并给Identity初始化;
                            二。重定向到原始请求页面:FormsAuthentication
                   
           
            Windows认证:
                    WindowsIdentity myIdentity = new WindowsIdentity("kevin","Normal");//为什么总是“无法登陆”???
                    Thread.CurrentPrincipal = new WindowsPrincipal(myIdentity);
                    正确方法:
                    设置web.config中认证方式为:windows;
                    设置IIS-安全性-去掉匿名访问,勾选windows集成认证;
                    则客户端访问时,第一次出现登陆对话框;
           
       WindowForm:
            Windows认证:??
                   


    突然觉得,Identity不过是一个用户信息的包装而已,包装了Name和Type,还要一个表示“是否包装”过的标志位:IsAuthenticated。
    Principal才提供了一些验证的功能,如IsInRole。
    另外重要的一点时:他们两个都是和线程(Thread)相关的,我想这是与自己包装的类的最大区别。
    所以在编写线程相关的代码时(如线程池),需要注意:新创建的线程将使用一个新的Principal和Identity,除非自己编码:
    myNewTread.CurrentPrincipal = Thread.CurrentPrincipal;
    myNewTread.Start();
    (对于BeginInvoke是个例外,确不知道是什么意思。)


    作者:水木    
     
  • 相关阅读:
    山东省第三届ACM省赛The Best Seat in ACM Contest
    Rescue The Princess(2013年山东省第四届ACM大学生程序设计竞赛A题)
    自定义颜色(UIColor)
    调用主程序的委托
    设置View的背景颜色
    基本控件_UIImageView
    CGRect
    屏幕尺寸
    UIScrollView 原理
    设置将警告当做Error来对待
  • 原文地址:https://www.cnblogs.com/hsapphire/p/1650418.html
Copyright © 2011-2022 走看看