/// <summary> /// URL生成 /// </summary> /// <remarks> /// <para>この関数は、validationUrl + "?targeturl=" + targetUrl + "&ticket=" + key の形式のURL文字列を生成します。</para> /// <para>keyは暗号化され、QueryStringとして付与されます。</para> /// </remarks> /// <param name="validationUrl">検証先URL</param> /// <param name="targetUrl">遷移先URL</param> /// <param name="key">キー</param> /// <returns>認証キーを含むリダイレクト先URL</returns> public string GenerateURL(string validationUrl, string targetUrl, string key) { // メソッド開始を記録します。 PCSiteTraceSource.MethodStart(validationUrl, targetUrl, key); // 検証先ページURLのチェック(null、空白チェック) if (string.IsNullOrEmpty(validationUrl)) { throw new ArgumentNullException("validationUrl"); } // 遷移先ページ識別子のチェック(null、空白チェック) if (string.IsNullOrEmpty(targetUrl)) { throw new ArgumentNullException("targetUrl"); } // キー値のチェック(null、空白チェック) if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } try { string returnURL = ""; PCSiteTraceSource.CheckPoint("GenerateURLメソッドチェック(ターゲットURL):" + targetUrl); // SingleSignOnTicketクラスのGentrateメソッド呼び出し string encriptTicket = SingleSignOnAuthKey.Generate(key); PCSiteTraceSource.CheckPoint("GenerateURLメソッドチェック(暗号化チケット):" + encriptTicket); // 認証キーを含むリダイレクト先URL作成 StringBuilder sb = new StringBuilder(); sb.Append(validationUrl); sb.Append("?targeturl="); // targetの値をURLエンコードします。 sb.Append(System.Web.HttpUtility.UrlEncode(targetUrl)); sb.Append("&ticket="); // ase64でエンコードした時に「+、/」が入るためURLエンコードします。 sb.Append(System.Web.HttpUtility.UrlEncode(encriptTicket)); returnURL = sb.ToString(); PCSiteTraceSource.CheckPoint("GenerateURLメソッドチェック(ReturnUrl):" + returnURL); // メソッド正常終了を記録します。 PCSiteTraceSource.MethodSuccess(); return(returnURL); } catch (Exception ex) { // アプリケーションエラーをトレースします。 PCSiteTraceSource.AppError("SingleSignOn.GenerateURLを呼び出した際のException", validationUrl, targetUrl, key, ex); throw new ApplicationException(ex.Message, ex); } }
protected void Application_BeginRequest(Object sender, EventArgs e) { TraceSources.AddAdditionalLogItem("RequsetId", Guid.NewGuid()); string AccessURI = HttpContext.Current.Request.Url.PathAndQuery; PCSiteTraceSource.CheckPoint("リクエストを受信しました。AccessURI: " + AccessURI); var context = HttpContext.Current; var security = new ApiSecurity(); if (!security.XidXpassFilter(context)) { context.Response.StatusCode = 404; } }
/// <summary> /// 認証キー検証 /// </summary> /// <param name="authenticationKey">認証キー</param> /// <returns>キー値</returns> public string Validate(string authenticationKey) { // 認証キーのチェック(null、空白チェック) if (authenticationKey == null || authenticationKey == "") { throw new ArgumentNullException("authenticationKey"); } // メソッド開始を記録します。 PCSiteTraceSource.MethodStart(authenticationKey); try { string key; // 復号化メソッド呼び出し後、キー情報の取り出し string[] condition = SingleSignOn.DecryptString(authenticationKey).Split(",".ToCharArray()); PCSiteTraceSource.CheckPoint("Validateメソッドチェック(キー):" + condition[0]); PCSiteTraceSource.CheckPoint("Validateメソッドチェック(チケット作成時間):" + condition[1]); PCSiteTraceSource.CheckPoint("Validateメソッドチェック(チケット有効期限):" + condition[2]); // 認証キー作成時間を取得 DateTime dt = Convert.ToDateTime(condition[1]); // 有効期限チェック:システム日付<認証キー作成時+ 有効期限(秒) if (DateTime.Now < dt.AddSeconds(Convert.ToDouble(condition[2]))) { key = condition[0]; } else { key = null; } PCSiteTraceSource.CheckPoint("Validateメソッドチェック(return値):" + key); // メソッド正常終了を記録します。 PCSiteTraceSource.MethodSuccess(); return(key); } catch (Exception ex) { // アプリケーションエラーをトレースします。 PCSiteTraceSource.AppError("SingleSignOnTicket.Validateを呼び出した際のException", authenticationKey, ex); throw new ApplicationException(ex.Message, ex); } }
/// <summary> /// UseCheckBxCookie 関数 /// </summary> /// <param name="UCheckFlg">保持フラグ</param> /// <param name="userid">ユーザーID</param> public static void UseCheckBxCookie(bool UCheckFlg, string userid) { PCSiteTraceSource.MethodStart(); // ユーザーIDの保持チェックボックスをCookieに反映 HttpCookie kie; PCSiteTraceSource.CheckPoint("UCheckFlg", UCheckFlg.ToString()); try { if (UCheckFlg) { // チェックフラグ kie = new HttpCookie("ckUSEFLG"); kie.Value = "true"; kie.Expires = DateTime.Now.Add(new System.TimeSpan(365, 0, 0, 0)); HttpContext.Current.Response.Cookies.Add(kie); PCSiteTraceSource.CheckPoint("CookiesAdd", "ckUSEFLG"); // ユーザーID kie = new HttpCookie("ckTCONNECTID"); kie.Value = userid; kie.Expires = DateTime.Now.Add(new System.TimeSpan(365, 0, 0, 0)); HttpContext.Current.Response.Cookies.Add(kie); PCSiteTraceSource.CheckPoint("CookiesAdd", "ckTCONNECTID"); } else { kie = new HttpCookie("ckUSEFLG"); kie.Value = ""; kie.Expires = DateTime.Now.Add(new System.TimeSpan(-1, 0, 0, 0)); HttpContext.Current.Response.Cookies.Add(kie); PCSiteTraceSource.CheckPoint("CookiesRemove", "ckUSEFLG"); } } catch (Exception ex) { PCSiteTraceSource.MethodFailure(ex.Message); } PCSiteTraceSource.MethodSuccess(); }
/// <summary> /// 認証処理を実施します。 /// </summary> /// <param name="id">入力されたログインId</param> /// <param name="password">入力されたパスワード</param> /// <returns>認証結果</returns> public AuthResult Auth(string id, string password) { PCSiteTraceSource.MethodStart(); var auth = new Toyota.Gbook.WebSite.Security.Control.Authentication(); try { var apiResult = auth.GetOneIdAuthResult(id, password); return(AuthResult.From(apiResult)); } catch (UnauthorizedException) { PCSiteTraceSource.CheckPoint("認証APIがHTTPステータス401を返却"); return(AuthResult.Unauthorize()); } catch (NoRelationException) { PCSiteTraceSource.CheckPoint("対象のIDに紐づいたT-ConnectIDなし"); return(AuthResult.NoRelation()); } }
/// <summary> /// GetRoles 関数 /// </summary> /// <returns> /// <dl> /// <dt>ロール文字</dt> /// <dd>戻り値 車載機モデルのロール文字列 /// </dd> /// </dl> /// </returns> private static string GetRoles() { PCSiteTraceSource.MethodStart(); string ret = ""; try { var dataset = HttpContext.Current.Session["Toyota.Gbook.WebSite.UserDataSet"] as Toyota.Gbook.WebSite.Security.DataTransferObject.ResultCDAuthenticationUserDataSet; if (dataset != null) { if (dataset.CarInformation.First().IsTConnectNavi&& HttpContext.Current.Session["Toyota.Gbook.WebSite.IsTerminatedUser"] != null) { if ((bool)HttpContext.Current.Session["Toyota.Gbook.WebSite.IsTerminatedUser"]) { ret = Constants.ROLE.ROLE_TCONNECT_EXIT; return(ret); } else { ret = Constants.ROLE.ROLE_TCONNECT; return(ret); } } } } catch (Exception ex) { PCSiteTraceSource.MethodFailure(ex.Message); } PCSiteTraceSource.CheckPoint("return", ret); PCSiteTraceSource.MethodSuccess(); return(ret); }
/// <summary> /// TicketCookieCreate 関数 /// </summary> public static void TicketCookieCreate() { PCSiteTraceSource.MethodStart(); // 認証チケットの発行 try { // ユーザーのロール文字設定 string roles = GetRoles(); PCSiteTraceSource.CheckPoint("roles", roles); // チケット作成 FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 1, HttpContext.Current.Session[Constants.PCSiteNameSpace + ".InternalMemberId"].ToString(), DateTime.Now, DateTime.Now.AddMinutes(Convert.ToDouble(Config.Item[Constants.PCSiteNameSpace + ".FormsAuthentication.TicketTime"].ToString())), false, roles); // チケットのCookie暗号化 string encryptedTicket = FormsAuthentication.Encrypt(authTicket); PCSiteTraceSource.CheckPoint("encryptedTicket", encryptedTicket); // チケットのCookie生成 HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); authCookie.Path = FormsAuthentication.FormsCookiePath; HttpContext.Current.Response.Cookies.Add(authCookie); PCSiteTraceSource.CheckPoint("CookiesAdd", FormsAuthentication.FormsCookieName, encryptedTicket, FormsAuthentication.FormsCookiePath); } catch (Exception ex) { PCSiteTraceSource.MethodFailure(ex.Message); } PCSiteTraceSource.MethodSuccess(); }
protected void Application_EndRequest(Object sender, EventArgs e) { string AccessURI = HttpContext.Current.Request.Url.PathAndQuery; PCSiteTraceSource.CheckPoint("レスポンスを送出しました。AccessURI: " + AccessURI); }