/// <summary>
        /// URL生成
        /// </summary>
        /// <remarks>
        /// <para>この関数は、validationUrl + "?targeturl=" + targetUrl + "&amp;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);
            }
        }
        /// <summary>
        ///	暗号化<br/>
        ///	Rijndael アルゴリズムを使用<br/>
        /// </summary>
        /// <param name="st">認証キー</param>
        /// <returns>暗号化された認証キー</returns>
        internal static string EncryptString(string st)
        {
            //	チケットのチェック(null、空白チェック)
            if (st == null || st == "")
            {
                throw new ArgumentNullException("Key");
            }

            //	メソッド開始を記録します。
            PCSiteTraceSource.MethodStart(st);

            try
            {
                // 暗号化された認証キー
                string encryptionTicket;

                byte[] key = null;
                byte[] iv  = null;

                // 暗号化キーを作成します。
                GenerateKey(ref key, ref iv);

                // 入力文字列を byte 配列に変換します。
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[]        source   = encoding.GetBytes(st);

                // Rijndael のサービス プロバイダを生成します。
                using (RijndaelManaged myRijndael = new RijndaelManaged())
                {
                    // 入出力用のストリームを生成します。
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, myRijndael.CreateEncryptor(key, iv), CryptoStreamMode.Write))
                        {
                            // ストリームに暗号化するデータを書き込みます。
                            cs.Write(source, 0, source.Length);
                            cs.Close();

                            // 暗号化されたデータを byte 配列で取得します。
                            byte[] destination = ms.ToArray();
                            ms.Close();

                            // byte 配列を文字列に変換して表示します。
                            encryptionTicket = Convert.ToBase64String(destination);
                        }
                    }
                }
                // メソッド正常終了を記録します。
                PCSiteTraceSource.MethodSuccess();
                return(encryptionTicket);
            }
            catch (Exception ex)
            {
                // アプリケーションエラーをトレースします。
                PCSiteTraceSource.AppError("SingleSignOn.EncryptStringを呼び出した際のException", st, ex);
                throw new ApplicationException(ex.Message, ex);
            }
        }
Exemple #3
0
        /// <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);
            }
        }
 internal async Task MailSend(MailAddress mailAddress, string token)
 {
     PCSiteTraceSource.MethodStart();
     try
     {
         var mailsender = new VerificationMailSender(new MailTemplateGateway(
                                                         new Blob(
                                                             Config.Item["Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"],
                                                             Config.Item["Toyota.Gbook.WebSite.MailTemplate.ContainerName"],
                                                             RetryPolicies.NoRetry())));
         await mailsender.SendPasswordReminderMail(mailAddress, token);
     }
     catch (Exception ex)
     {
         PCSiteTraceSource.AppError("メールGWを利用してのメール送信中に例外が発生しました。", ex);
         throw;
     }
 }
 public string StoreVerificationData(string mailAddress, string internalMemnerId, string memberDivision)
 {
     try
     {
         PCSiteTraceSource.MethodStart();
         var tokenGenerator     = new TokenGenetator();
         var token              = tokenGenerator.GenerateToken(internalMemnerId, new MailAddress(mailAddress));
         var azureTableOperator = new AzureTableOperation();
         azureTableOperator.StoreEmailAddressIfNeed(internalMemnerId, new MailAddress(mailAddress));
         azureTableOperator.StorePasswordResetRequest(internalMemnerId, memberDivision);
         return(token);
     }
     catch (TableNotFoundException tex)
     {
         PCSiteTraceSource.ConnectionFailToAzureStorageTable("VerifiedEmailテーブル、またはStoredTokenテーブル", tex);
         throw;
     }
 }
Exemple #6
0
        /// <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();
        }
 internal async Task MailSend(MailAddress mailAddress, List <string> internalMemberId)
 {
     PCSiteTraceSource.MethodStart();
     try
     {
         var url        = Config.Get <string>("Toyota.Gbook.WebSite.Mail.MailGW.Url");
         var subject    = Config.Get <string>("Toyota.Gbook.WebSite.IdRemind.Subject");
         var mailsender = new VerificationMailSender(new MailTemplateGateway(
                                                         new Blob(
                                                             Config.Item["Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"],
                                                             Config.Item["Toyota.Gbook.WebSite.MailTemplate.ContainerName"],
                                                             RetryPolicies.NoRetry())));
         await mailsender.SendIdReminderMail(mailAddress, internalMemberId);
     }
     catch (Exception ex)
     {
         PCSiteTraceSource.AppError("メールGWを利用してのメール送信中に例外が発生しました。", ex);
     }
 }
Exemple #8
0
        /// <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());
            }
        }
Exemple #9
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public LoginProcess()
        {
            PCSiteTraceSource.MethodStart();

            // メンバ初期化
            if (_SessionKeyList.Count == 0)
            {
                lock (_SessionKeyList)
                {
                    if (_SessionKeyList.Count == 0)
                    {
                        _SessionKeyList.AddRange(
                            typeof(SessionKey).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static)
                            .Select(t => t.GetValue(null).ToString()));
                    }
                }
            }

            SecurityAuth = new AuthenticationDataSet();

            PCSiteTraceSource.MethodSuccess();
        }
Exemple #10
0
        /// <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);
        }
Exemple #11
0
        /// <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();
        }
Exemple #12
0
        /// <summary>
        ///	暗号化キー、初期ベクター作成
        /// </summary>
        /// <param name="key">キー</param>
        /// <param name="iv">初期ベクター</param>
        /// <dl>
        ///		<dt>正常終了ケース</dt>
        ///		<dd>キー、初期ベクターが返ります。</dd>
        ///		<dt>エラーケース</dt>
        ///		<dd>暗号化キー、初期ベクターの取得に失敗した場合、Abort扱いとします。
        ///		</dd>
        /// </dl>
        private static void GenerateKey(ref byte[] key, ref byte[] iv)
        {
            //	メソッド開始を記録します。
            PCSiteTraceSource.MethodStart();

            try
            {
                //	machine.confingから暗号化キーを取得します。
                string key_temp = Config.Item["Toyota.Gbook.WebSite.SingleSignOn.TicketEncryptionKey"];

                //	文字列をバイト型に変換する。
                key = new byte[SingleSignOn.EncryptTicketKeyIndex];
                for (int i = 0, j = 0; j < SingleSignOn.EncryptTicketKeyIndex; i += 2, j++)
                {
                    key[j] = Convert.ToByte(key_temp.Substring(i, 2), 16);
                }

                //	machine.confingから初期ベクターを取得します。
                string iv_temp = Config.Item["Toyota.Gbook.WebSite.SingleSignOn.TicketEncryptionIV"];

                //	文字列をバイト型に変換する。
                iv = new byte[SingleSignOn.EncryptTicketIVIndex];
                for (int i = 0, j = 0; j < SingleSignOn.EncryptTicketIVIndex; i += 2, j++)
                {
                    iv[j] = Convert.ToByte(key_temp.Substring(i, 2), 16);
                }

                //	メソッド正常終了を記録します。
                PCSiteTraceSource.MethodSuccess();
            }
            catch (Exception ex)
            {
                // アプリケーションエラーをトレースします。
                PCSiteTraceSource.AppError("SingleSignOn.GenerateKeyを呼び出した際のException", key, iv, ex);
                throw new ApplicationException(ex.Message, ex);
            }
        }
Exemple #13
0
        /// <summary>
        /// CheckAuthenticationTicket 関数
        /// </summary>
        /// <returns>
        ///   <dl>
        ///     <dt>チケット在りケース</dt>
        ///     <dd>戻り値 暗号解除したFormsAuthenticationTicket
        ///         Cookieから認証チケット名の値を取り出し、暗号解除を行う。
        ///     </dd>
        ///
        ///     <dt>チケット無しケース</dt>
        ///     <dd>戻り値 null</dd>
        ///   </dl>
        /// </returns>
        public static FormsAuthenticationTicket CheckAuthenticationTicket()
        {
            PCSiteTraceSource.MethodStart();

            HttpCookie AuthenticationCookie = null;
            FormsAuthenticationTicket ret   = null;

            // 認証チケット名のCookieを調べる
            try
            {
                AuthenticationCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
            }
            catch (Exception ex)
            {
                AuthenticationCookie = null;
                PCSiteTraceSource.MethodFailure(ex.Message);
            }

            if (AuthenticationCookie != null)
            {
                // Cookie値を復号化
                try
                {
                    ret = FormsAuthentication.Decrypt(AuthenticationCookie.Value);
                }
                catch (Exception ex)
                {
                    // 不正チケット
                    ret = null;
                    PCSiteTraceSource.MethodFailure(ex.Message);
                }
            }

            PCSiteTraceSource.MethodSuccess();
            return(ret);
        }
Exemple #14
0
        /// <summary>
        ///	認証キー生成
        /// </summary>
        /// <param name="key">キー値</param>
        /// <returns>認証キー</returns>
        internal static string Generate(string key)
        {
            //	キー値のチェック(null、空白チェック)
            if (key == null || key == "")
            {
                throw new ArgumentNullException("key");
            }

            //	メソッド開始を記録します。
            PCSiteTraceSource.MethodStart(key);

            try
            {
                //	machine.confingから有効期限(秒)を取得します。
                string ExpirationTime = Config.Item["Toyota.Gbook.WebSite.SingleSignOn.ExpirationTime"];

                StringBuilder sb = new StringBuilder();
                sb.Append(key);
                sb.Append(",");
                sb.Append(Toyota.Gbook.WebSite.Common.JapaneseDateTime.Now.ToString());
                sb.Append(",");
                sb.Append(ExpirationTime);

                //	メソッド正常終了を記録します。
                PCSiteTraceSource.MethodSuccess();

                //	暗号化メソッド呼び出し
                return(SingleSignOn.EncryptString(sb.ToString()));
            }
            catch (Exception ex)
            {
                //	アプリケーションエラーをトレースします。
                PCSiteTraceSource.AppError("SingleSignOnTicket.Generateを呼び出した際のException", key, ex);
                throw new ApplicationException(ex.Message, ex);
            }
        }