【Vegas原创】经典的AD+NT+Normal认证(C#版)

鉴于此,要使用Forms认证方式
1。web.config:

    <authentication  mode="Forms" >
      
<forms name="PlatForm" defaultUrl="default.aspx" path="/"></forms>
    
</authentication>

 

    <appSettings>
         
    
<add key="LDAP" value="LDAP://server:389/OU=*,DC=*,DC=*"/>
    
</appSettings>


2。login.aspx:

    <form id="form1" runat="server">
    
<div>
     
<p>  <asp:TextBox ID="txtName" runat="server"></asp:TextBox></p> 
        
<asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox>
        
<p><asp:DropDownList ID="drpDomain" runat="server">
            
<asp:ListItem Selected="True">aa</asp:ListItem>
            
<asp:ListItem></asp:ListItem>
            
<asp:ListItem Value="bb">bb</asp:ListItem>
        
</asp:DropDownList></p>  
        
<asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
      
</div>
    
</form>


3.login.aspx.cs

 DBAccess db = new DBAccess();
    
protected void Page_Load(object sender, EventArgs e)
    {
        
//如果default.aspx没有做退出动作
        if (Request.QueryString["Flag"!= "Y")
        {
            
//初始化,抓取NT帐号
            if (Request.ServerVariables["LOGON_USER"!= "")
            {
                FormsAuthentication.RedirectFromLoginPage(Request.ServerVariables[
"LOGON_USER"], true);
            } 
        }
        
//否则,进行Normal or AD验证
        else
        {
         
        }
    }

 

    protected void btnLogin_Click(object sender, EventArgs e)
    {
            
//判断非AD账号
            string strSql="select * from users where job=1 and account_ID='"+txtName.Text.Trim()+"' and psWrd='"+txtPwd.Text.Trim()+"'";
            DataSet ds
=db.GetDataSet(strSql);

            clsData objData 
= new clsData();
            
//AD验证
            if (objData.CheckNTAccount(txtName.Text, txtPwd.Text, drpDomain.SelectedValue)) 
            {
                FormsAuthentication.RedirectFromLoginPage(txtName.Text, 
true);
            }
            
//其他非AD账号
            else if(ds.Tables[0].Rows.Count!=0)    
            {
                FormsAuthentication.RedirectFromLoginPage(txtName.Text, 
true);
            }
            
//如果不能成功登录,显示出错信息 
            else 
            {
                Response.Write(
"<script type=text/javascript>alert(\'请输入正确的密码,账号~\');</script>");
            }
        
    }


4.default.aspx.cs

    protected void lbtnLogout_Click(object sender, EventArgs e)
    {
        
string strFlag = "flag=Y";
        FormsAuthentication.RedirectToLoginPage(strFlag);
    }


5.clsData.cs(AD验证)

using System.DirectoryServices;   //此为AD验证的控件,一定要加载!!!
/// <summary>
/// clsData 的摘要说明
/// </summary>
public class clsData
{
    
public clsData()
    {
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }
    
public bool CheckNTAccount(string UserName, string Password, string Domain)
    {

        DirectoryEntry Ad;
        
//            DirectorySearcher ds;
        string strLDAP = System.Configuration.ConfigurationSettings.AppSettings["LDAP"];

        Ad 
= new DirectoryEntry(strLDAP, Domain + "\\" + UserName, Password, AuthenticationTypes.ServerBind);

        
try
        {
            
object obj = Ad.NativeObject; //检查是否可正常登入
         
            
return true;
        }

        
catch (Exception)
        {
            
return false;
        }

        
finally
        {
            Ad.Dispose();
        }

    }
}


6,DBAccess.cs
    详见:
http://www.cnblogs.com/ReadAuthen.aspx?EntryID=922281&ReturnUrl=/vegaslee/archive/2007/10/12/922281.html

posted @   李济宏(Amadeus)  阅读(312)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示