首页 > 代码库 > ASP.NET-AD(ActiveDirectory)用户验证

ASP.NET-AD(ActiveDirectory)用户验证

http://blog.sina.com.cn/s/blog_5067ef490101e1ul.html

 

  protected void Page_Load(object sender, EventArgs e)    {        // 認証処理開始        string staffCode = string.Empty;        if (!CheckUtility.IsEmpty(Request.QueryString[ConstValue.QUERY_STRING_KEY_STFCD]))        {            staffCode = Request.QueryString[ConstValue.QUERY_STRING_KEY_STFCD].ToString();        }        string loginUserID = string.Empty;        if (CheckUtility.IsEmpty(staffCode))        {            // URLパラメータで担当者コードが取得できなかったとき            // ADよりドメイン情報の取得            string[] name = User.Identity.Name.Split(‘\\‘);            // ADよりログインユーザのドメイン情報を取得            string loginUserDomain = name[0];            WebLogUtility.WriteDebugLog("ログインアカウント(ドメイン):" + loginUserDomain);            // ADよりログインユーザIDを取得            loginUserID = name[1];            WebLogUtility.WriteDebugLog("ログインアカウント:" + loginUserID);            LdapAuthentication ldap = new LdapAuthentication();            staffCode = ldap.GetEmployee(loginUserDomain, loginUserID);        }        //担当者コード(AD取得)で権限マスタから権限コードを取得        Dictionary<string, object> parameter = new Dictionary<string, object>();        parameter.Add(StaffInfoBll.REQUEST_KEY_STAFF_CODE, staffCode);        ResponseDataType response = new StaffInfoBll().Execute(parameter);        // BLLからの返却値を元にSessionに値を設定        StaffInfo staffInfo = (StaffInfo)response[StaffInfoBll.RESPONSE_KEY_STAFF_INFO];        if (staffInfo == null || CheckUtility.IsEmpty(staffInfo.StfCd))        {            ApplException excep = new ApplException("担当者マスタにユーザーが存在しません。");            excep.LongInUserId = staffCode;            excep.NtAccount = loginUserID;            throw excep;        }        staffInfo.NtUserCd = loginUserID;        staffInfo.Ip = GetClientIPAddress();        Session[ConstValue.SESSION_KEY_STAFF_INFO] = staffInfo;        Session[ConstValue.SESSION_KEY_SYS_STAFF_INFO] = staffInfo;        Session[ConstValue.SESSION_KEY_IS_AUTHENTICATED] = true;        //}        StringBuilder redirectUrl = new StringBuilder();        Dictionary<string, object> redirectKey = new Dictionary<string, object>();        // 遷移先URLの取得        string dispId = (string)Request.QueryString[ConstValue.QUERY_STRING_KEY_DISP_ID];        redirectUrl.Append(this.GetUrl(dispId));        redirectUrl.Append("?");        redirectUrl.Append(Request.QueryString.ToString());        //セッション変数への格納        Session.Add(ConstValue.SESSION_KEY_REDIRECT, redirectKey);        // リダイレクト        Response.Redirect(redirectUrl.ToString());    }

 

    /// <summary>    /// IPアドレスの取得    /// </summary>    /// <returns></returns>    public string GetClientIPAddress()    {        return Request.ServerVariables["REMOTE_ADDR"];    }
using System;using System.DirectoryServices;using System.Configuration;using Otsuka.Application.Common.Exception;using Otsuka.Application.Common;/// <summary>/// ActiveDirectoryのユーザ情報を取得する/// </summary>public class LdapAuthentication{    /// <summary>    ///     /// </summary>    private DirectoryEntry DrEntry;    /// <summary>    /// ドメイン名    /// </summary>    private string _domainName;    /// <summary>    /// ユーザ    /// </summary>    private string _userName;    /// <summary>    /// パスワード    /// </summary>    private string _password;    /// <summary>    /// サーバ    /// </summary>    private string _serverName;    //第1引き数に、ユーザドメイン名を追加    /// <summary>    /// ユーザの所属するドメイン名    /// </summary>    private string _userDomainName;    /// <summary>    /// コンストラクタ    /// </summary>    public LdapAuthentication()    {    }    /// <summary>    /// 接続したディレクトリのユーザ情報を取得    /// </summary>    /// <param name="domainName">担当者のドメイン名</param>    /// <param name="account">取得したい担当者のアカウント</param>    /// <returns>担当者コード</returns>    public string GetEmployee(string domainName, string account)    {        this._domainName = ConfigurationManager.AppSettings[ConstValue.DC_DomainName].ToString();        this._userName = ConfigurationManager.AppSettings[ConstValue.DC_UserName].ToString();        this._password = ConfigurationManager.AppSettings[ConstValue.DC_Password].ToString();        this._serverName = ConfigurationManager.AppSettings[ConstValue.DC_ServerName].ToString();                //Web.Configから担当者のドメインと一致するLDAP_DNを取得        if (ConfigurationManager.AppSettings["DC_LdapDn_" + domainName.ToLower()] != null)        {            _userDomainName = ConfigurationManager.AppSettings["DC_LdapDn_" + domainName.ToLower()].ToString();            _userDomainName = _userDomainName.ToLower();        }        //AD接続確認        if (!AccessAD())        {            throw new UserNotFoundException("", "", _userName);        }        //ユーザ情報取得        DirectorySearcher searcher = new DirectorySearcher();        searcher.SearchRoot = DrEntry;        searcher.Filter = "(SAMAccountName=" + account + ")";        SearchResult result = searcher.FindOne();        // アカウントが存在しない場合        // アカウントのイニシャル項目に値が設定されていない場合        if (result == null || result.Properties["Initials"].Count.Equals(0))        {            throw new UserNotFoundException("", "", account);        }        return result.Properties["Initials"][0].ToString();    }    /// <summary>    /// ディレクトリへの接続確認    /// </summary>    /// <returns>true:接続可能、false:接続不可</returns>    private bool AccessAD()    {        // アクセスするための情報を作成        string domainAndUsername = _domainName + @"\" + _userName;        string[] servers = _serverName.Split(,);        foreach (string server in servers)        {            string LDAP = "LDAP://" + server;            //====== 2010/02/26 [CLドメイン対応] ADD START =========            //呼出字にユーザドメイン名を追加            if (!String.IsNullOrEmpty(_userDomainName))            {                LDAP = LDAP + "/" + _userDomainName;            }            //====== 2010/02/26 [CLドメイン対応] ADD END =========            DrEntry = new DirectoryEntry(LDAP, domainAndUsername, _password);            try            {                object navi = DrEntry.NativeObject;                return true;            }            catch            {                continue;            }        }        return false;    }}

 

ASP.NET-AD(ActiveDirectory)用户验证