首页 > 代码库 > 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)用户验证
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。