Пример #1
0
        public bool XidXpassFilter(HttpContext context)
        {
            var pathConfig = Config.Item["Toyota.Gbook.WebSite.TConnectApi.XidPassFilter"];
            var headers    = context.Request.Headers;
            //Hack: 大文字小文字区別するでいいかどうか確認(x-idやX-idなどを許可しない方針でよいか)
            //現状は13MMのISAPIフィルターの実装と同じになっている。
            var xid   = headers.GetValues("X-ID");
            var xpass = headers.GetValues("X-Password");

            try
            {
                var pairOfIdPass = xid[0] + "," + xpass[0];
                var allowList    = System.IO.File.ReadAllLines(GetPath(pathConfig))
                                   .Select(_ => _.Trim())
                                   .Where(_ => !string.IsNullOrWhiteSpace(_));

                if (allowList.Contains(pairOfIdPass))
                {
                    return(true);
                }
                else
                {
                    PCSiteTraceSource.InvalidAccess_Api(context.Request.RawUrl, null);
                    return(false);
                }
            }
            catch (NullReferenceException)
            {
                PCSiteTraceSource.SettingKeyMissing("Toyota.Gbook.WebSite.TConnectApi.XidPassFilter");
                return(false);
            }
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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);
            }
        }
        public object Get(HttpRequestMessage requestMessage, string id)
        {
            var messageId = requestMessage.GetCorrelationId().ToString();

            TraceSources.AddAdditionalLogItem("RequestMessageId", messageId);
            try
            {
                var passwordChange = new PasswordChange();
                var token          = passwordChange.ExpirationCheck(id);
                return(new IsExpiredTokenSuccessResponse
                {
                    Result = passwordChange.Result != PasswordChange.ValidatedResult.IsExpired && token != null
                });
            }
            catch (InvalidRequestForTConnectApiException e)
            {
                PCSiteTraceSource.InvalidRequest_Api("is-expired-token", "token", e);
                return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
            }
            catch (InvalidJwtException ex)
            {
                var trace = PCSiteTraceSource.InvalidJwt(id, ex);
                var code  = 0;
                trace.TryGetId(out code);
                return(requestMessage.CreateResponse(HttpStatusCode.BadRequest,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", code.ToString() }
                    }
                }));
            }
            catch (TableNotFoundException tex)
            {
                var trace = PCSiteTraceSource.ConnectionFailToAzureStorageTable_Api("StredTokenテーブルにアクセスできませんでした。", tex);
                var code  = 0;
                trace.TryGetId(out code);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", code.ToString() }
                    }
                }));
            }
            catch (Exception ex)
            {
                var trace = PCSiteTraceSource.SystemError_Api("有効期限検証APIで想定外のエラーが発生", ex);
                var code  = 0;
                trace.TryGetId(out code);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", code.ToString() }
                    }
                }));
            }
        }
Пример #5
0
        protected void Application_Error(Object sender, EventArgs e)
        {
            // 例外オブジェクトを取得
            Exception ex = Server.GetLastError();

            if (ex is System.Web.HttpUnhandledException)
            {
                ex = ex.InnerException;
            }
            // パブリッシャに例外の出力を出力
            PCSiteTraceSource.SystemError("APIで想定外のエラーが発生しました。", ex);
        }
Пример #6
0
        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;
            }
        }
Пример #7
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);
            }
        }
 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;
     }
 }
Пример #9
0
 public static CompanyRequest GetRequestJson_CompanyForRemindId(string request)
 {
     try
     {
         var companyReq = JsonConvert.DeserializeObject <CompanyRequest>(request);
         return(companyReq);
     }
     catch (JsonReaderException jex)
     {
         PCSiteTraceSource.InvalidRequest_Api("api/remind-id", request, jex);
         throw new InvalidJsonException();
     }
     catch (JsonSerializationException jex)
     {
         PCSiteTraceSource.InvalidRequest_Api("api/remind-id", request, jex);
         throw new InvalidJsonException();
     }
 }
 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;
     }
 }
Пример #11
0
 public static Input_Onpre_Contact GetRequestJsonForContact(string request)
 {
     try
     {
         var onpreRequest = JsonConvert.DeserializeObject <Input_Onpre_Contact>(request);
         return(onpreRequest);
     }
     catch (JsonReaderException jex)
     {
         PCSiteTraceSource.InvalidRequest_Api("api/contact", request, jex);
         throw new InvalidRequestForContactException("Jsonとして不正");
     }
     catch (JsonSerializationException jex)
     {
         PCSiteTraceSource.InvalidRequest_Api("api/contact", request, jex);
         throw new InvalidRequestForContactException("Jsonとして不正");
     }
 }
 public static PersonRequest GetRequestJsosn_PersonForRemindPass(string request)
 {
     try
     {
         var personReq = JsonConvert.DeserializeObject <PersonRequest>(request);
         return(personReq);
     }
     catch (JsonReaderException jex)
     {
         PCSiteTraceSource.InvalidRequest_Api("api/reset-password", request, jex);
         throw new InvalidJsonException();
     }
     catch (JsonSerializationException jex)
     {
         PCSiteTraceSource.InvalidRequest_Api("api/reset-password", request, jex);
         throw new InvalidJsonException();
     }
 }
Пример #13
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();
        }
Пример #14
0
 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);
     }
 }
Пример #15
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());
            }
        }
Пример #16
0
        public void IsPersonalMember(string internalMemberId)
        {
            Toyota.Gbook.WebSite.DataAccess.Member.Entity.MemberInformationEntity mEntity =
                Toyota.Gbook.WebSite.DataAccess.Member.Control.Member.GetMemberInfo(internalMemberId);
            var memberDivisionPersonal = "1";

            if (string.IsNullOrEmpty(mEntity.MemberDivision))
            {
                PCSiteTraceSource.AppError("会員区分が取得できませんでした。内部会員Id:", internalMemberId);
                throw new UserNotFoundException(internalMemberId, "個人", "会員区分が取得できませんでした。");
            }

            if (mEntity.MemberDivision == "0")
            {
                throw new UnexpectedMemberDivisionException(internalMemberId, "個人", "会員区分「0:ID、Passのみ」が返却されました。");
            }
            else if (mEntity.MemberDivision != memberDivisionPersonal)
            {
                var memberDivision = string.Format("入力された会員区分:{0}, APIのレスポンスから取得した会員区分: {1}", "個人", "");
                throw new UserNotFoundException(internalMemberId, "個人", "指定されたユーザーが存在しません。" + memberDivision);
            }
        }
Пример #17
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();
        }
Пример #18
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();
        }
Пример #19
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);
        }
Пример #20
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);
            }
        }
Пример #21
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);
        }
Пример #22
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);
            }
        }
Пример #23
0
        /// <summary>
        /// 認可APIの結果をDataSetに格納にし、認証結果をboolで返却します。
        /// </summary>
        /// <param name="userDataSet">認証結果のデータセット</param>
        public bool AuthTConnectNavi(ResultCDAuthenticationUserDataSet userDataSet)
        {
            var  auth = new Toyota.Gbook.WebSite.Security.Control.Authentication();
            bool isTConnectNavi;

            try
            {
                isTConnectNavi = auth.SetIsTConnectNaviFlag(userDataSet);

                // 認証インタフェース処理結果コード
                SecurityResultCode = userDataSet.ReturnInformation[0].ResultCD;

                // T-ConnectNavi判定結果
                if (!userDataSet.CarInformation[0].IsIsTConnectNaviNull())
                {
                    IsTConnectNavi = userDataSet.CarInformation[0].IsTConnectNavi;
                    isTConnectNavi = (bool)IsTConnectNavi;
                }

                if (!isTConnectNavi)
                {
                    // 143:G-BOOK未契約
                    isTConnectNavi = SecurityResultCode == GBOOK_UN_CONTRACT;
                }

                if (isTConnectNavi)
                {
                    // 認証OK
                    // 接続区分巻き替え
                    for (int i = 0; i < userDataSet.CarInformation.Count; i++)
                    {
                        string conn = userDataSet.CarInformation[i].ConnectDivision;
                        if (conn == SECURITY_DCM_CONNECT_VALUE)
                        {
                            userDataSet.CarInformation[i].ConnectDivision = Common.Constants.ConnectDCM;
                        }
                        else if (conn == SECURITY_MOBILE_PHONE_CONNECT_VALUE)
                        {
                            userDataSet.CarInformation[i].ConnectDivision = Common.Constants.ConnectMobilePhone;
                        }
                    }

                    // セッション値設定
                    // 1件目のデータを取得する(2件以上のデータが存在することは想定外)
                    var carInfo    = userDataSet.CarInformation[0];
                    var memberInfo = userDataSet.MemberInformation[0];

                    HttpContext.Current.Session[SessionKey.USERDATASET]        = userDataSet.Copy();
                    HttpContext.Current.Session[SessionKey.SERVICE_DIVISION]   = carInfo.ServiceDivision;
                    HttpContext.Current.Session[SessionKey.GBML_VERSION]       = carInfo.GBML_VERSION;
                    HttpContext.Current.Session[SessionKey.CONNECT_DIVISION]   = carInfo.ConnectDivision;
                    HttpContext.Current.Session[SessionKey.TCONNECT_ID]        = memberInfo.TConnectId;
                    HttpContext.Current.Session[SessionKey.PASSWORD]           = memberInfo.Password;
                    HttpContext.Current.Session[SessionKey.INTERNAL_MEMBER_ID] = memberInfo.InternalMemberId;
                    HttpContext.Current.Session[SessionKey.MEMBER_DIVISION]    = memberInfo.MemberDivision;
                    HttpContext.Current.Session[SessionKey.IS_PRESITE_USER]    = userDataSet.MemberInformation[0].PreSiteMemberFlag == "1"; // "1"=true
                    // ESPoサイトへ渡すSession情報を格納
                    HttpContext.Current.Session[SessionKey.ESPO_MODEL]         = Constants.MODEL.MODEL_13;
                    HttpContext.Current.Session[SessionKey.IS_TERMINATED_USER] = SecurityResultCode == GBOOK_UN_CONTRACT;
                }
                else
                {
                    // 認証失敗
                    _SessionKeyList.ForEach(
                        key =>
                    {
                        if (HttpContext.Current.Session[key] != null)
                        {
                            HttpContext.Current.Session.Remove(key);
                        }
                    });
                }
            }
            catch (ApplicationException)
            {
                _SessionKeyList.ForEach(
                    key =>
                {
                    if (HttpContext.Current.Session[key] != null)
                    {
                        HttpContext.Current.Session.Remove(key);
                    }
                });
                // そのままthrow
                throw;
            }
            catch (Exception ex)
            {
                PCSiteTraceSource.AppError(ex.Message);
                _SessionKeyList.ForEach(
                    key =>
                {
                    if (HttpContext.Current.Session[key] != null)
                    {
                        HttpContext.Current.Session.Remove(key);
                    }
                });
                throw new ApplicationException(ex.Message, ex);
            }

            PCSiteTraceSource.MethodSuccess();

            return(isTConnectNavi);
        }
Пример #24
0
        public async Task <object> Post(HttpRequestMessage requestMessage, [FromBody] JObject request)
        {
            var messageId = requestMessage.GetCorrelationId().ToString();

            TraceSources.AddAdditionalLogItem("RequestMessageId", messageId);
            try
            {
                CheckRequest(request);
                var requestXml     = JsonConvert.DeserializeXmlNode(request.ToString(), "contact");
                var xmlDeclaration = requestXml.CreateXmlDeclaration("1.0", "UTF-8", null);
                using (var stringwriter = new StringWriter())
                    using (var xmltextWriter = new XmlTextWriter(stringwriter))
                    {
                        xmlDeclaration.WriteTo(xmltextWriter);
                        requestXml.WriteTo(xmltextWriter);
                        var requestBodyXml = stringwriter.ToString();
                        var url            = new Uri(Config.Get <string>("Toyota.Gbook.WebSite.Contact.MemberUtilityApi.Url"));
                        using (var client = new HttpClient())
                            using (var m = new HttpRequestMessage
                            {
                                Method = HttpMethod.Post,
                                RequestUri = url,
                                Content = new StringContent(requestBodyXml)
                            })
                            {
                                m.Headers.Add("MessageId", messageId);

                                var xid   = Config.Get <string>("Toyota.Gbook.WebSite.TConnect.XId");
                                var xpass = Config.Get <string>("Toyota.Gbook.WebSite.TConnect.XPassword");
                                m.Headers.Add("X-ID", xid);
                                m.Headers.Add("X-Password", xpass);
                                PCSiteTraceSource.ApiExecute_Api("問合せAPI(オンプレ)", url.ToString(), requestBodyXml);
                                var response = await client.SendAsync(m);

                                var responseXml = await response.Content.ReadAsStringAsync();

                                PCSiteTraceSource.ApiResponsed_Api("問合せAPI(オンプレ)", response.StatusCode, responseXml);

                                if (response.StatusCode == HttpStatusCode.OK)
                                {
                                    var x = new XmlDocument();
                                    x.LoadXml(responseXml);
                                    var code           = x.SelectSingleNode("//contact/result_code").InnerText;
                                    var result_message = x.SelectSingleNode("//contact/result_code_message").InnerText;
                                    if (code == "000000")
                                    {
                                        if (request["registered"]["user_id"] == null)
                                        {
                                            return(new SuccessResponse
                                            {
                                                UserId = "",
                                                Datetime = request["inquiry"]["input_date"].ToString() + request["inquiry"]["input_time"]
                                            });
                                        }
                                        else
                                        {
                                            return(new SuccessResponse
                                            {
                                                UserId = request["registered"]["user_id"].ToString(),
                                                Datetime = request["inquiry"]["input_date"].ToString() + request["inquiry"]["input_time"]
                                            });
                                        }
                                    }
                                    if (code == "100002")
                                    {
                                        //入力チェックエラー
                                        var trace     = PCSiteTraceSource.UnexpectedResultCode_Api(url.ToString(), code);
                                        var errorCode = 0;
                                        trace.TryGetId(out errorCode);
                                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                                    }
                                    if (code == "300000")
                                    {
                                        //DBアクセスエラー
                                        var trace     = PCSiteTraceSource.UnexpectedResultCode_Api(url.ToString(), code);
                                        var errorCode = 0;
                                        trace.TryGetId(out errorCode);
                                        return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                                             new ErrorResponse {
                                            Errors = new Dictionary <string, string> {
                                                { "code", errorCode.ToString() }
                                            }
                                        }));
                                    }

                                    if (code == "500000")
                                    {
                                        var trace     = PCSiteTraceSource.InvalidRequest_Api(url.ToString(), requestBodyXml, null);
                                        var errorCode = 0;
                                        trace.TryGetId(out errorCode);
                                        return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                                             new ErrorResponse {
                                            Errors = new Dictionary <string, string> {
                                                { "code", errorCode.ToString() }
                                            }
                                        }));
                                    }

                                    if (code == "600000")
                                    {
                                        var trace     = PCSiteTraceSource.ValueMissing_Api(url.ToString(), "処理結果コード");
                                        var errorCode = 0;
                                        trace.TryGetId(out errorCode);
                                        return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                                             new ErrorResponse {
                                            Errors = new Dictionary <string, string> {
                                                { "code", errorCode.ToString() }
                                            }
                                        }));
                                    }

                                    if (code == "900000")
                                    {
                                        var trace     = PCSiteTraceSource.SystemError_Api(string.Format("問合せAPI(オンプレ)で想定外のエラーが発生。メッセージ:", result_message), null);
                                        var errorCode = 0;
                                        trace.TryGetId(out errorCode);
                                        return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                                             new ErrorResponse {
                                            Errors = new Dictionary <string, string> {
                                                { "code", errorCode.ToString() }
                                            }
                                        }));
                                    }

                                    var errorTrace        = PCSiteTraceSource.UnexpectedResultCode(url.ToString(), code);
                                    var unexpcetErrorCode = 0;
                                    errorTrace.TryGetId(out unexpcetErrorCode);
                                    return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                                         new ErrorResponse {
                                        Errors = new Dictionary <string, string> {
                                            { "code", unexpcetErrorCode.ToString() }
                                        }
                                    }));
                                }
                                else
                                {
                                    var trace     = PCSiteTraceSource.UnexpectedHttpStatus_Api(url.ToString(), response.StatusCode, "");
                                    var errorCode = 0;
                                    trace.TryGetId(out errorCode);
                                    return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                                         new ErrorResponse {
                                        Errors = new Dictionary <string, string> {
                                            { "code", errorCode.ToString() }
                                        }
                                    }));
                                }
                            }
                    }
            }
            catch (InvalidRequestForContactException ie)
            {
                PCSiteTraceSource.InvalidRequest_Api("tcmypage/api/contact", request.ToString(), ie);
                return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
            }
            catch (Exception e)
            {
                var trace = PCSiteTraceSource.SystemError_Api("問合せAPIで想定外のエラーが発生", e);
                var code  = 0;
                trace.TryGetId(out code);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", code.ToString() }
                    }
                }));
            }
        }
Пример #25
0
        protected void Application_EndRequest(Object sender, EventArgs e)
        {
            string AccessURI = HttpContext.Current.Request.Url.PathAndQuery;

            PCSiteTraceSource.CheckPoint("レスポンスを送出しました。AccessURI: " + AccessURI);
        }
        // POST: api/ResetPassword
        public async Task <object> Post(HttpRequestMessage requestMessage, [FromBody] JObject request)
        {
            var messageId = requestMessage.GetCorrelationId().ToString();

            TraceSources.AddAdditionalLogItem("RequestMessageId", messageId);
            var emailAddress = "";

            try
            {
                var personReq  = GetRequestJsosn_PersonForRemindPass(request.ToString());
                var companyReq = GetRequestJson_CompanyForRemindPass(request.ToString());

                var person  = personReq.person;
                var company = companyReq.company;

                if (person != null)
                {
                    if (person.member_id == null || person.birthday == null || person.email == null)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "必須要素が存在しない", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }
                    var memberId = person.member_id;
                    var strBirth = person.birthday;
                    emailAddress = person.email;

                    if (memberId.Equals(string.Empty) || memberId.Length > 256)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "会員ID", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }

                    //入力チェック
                    if (emailAddress.Equals(string.Empty) || emailAddress.Length > 256)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "メールアドレス", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }

                    try
                    {
                        DateTime.ParseExact(strBirth, "yyyyMMdd", null);
                    }
                    catch (Exception)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "誕生日", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }

                    //個人の場合I003000213 会員ログイン情報取得を呼びだす
                    var reminder = new Toyota.Gbook.WebSite.Authentication.Control.Reminder();
                    //パスワード変更の場合はT-ConnectIdを指定しているため取得できうる内部会員IDは常に1件のみ。
                    var memberInfoList = reminder.CheckPersonalMemberExist(memberId, strBirth, emailAddress)[0];

                    var token = StoreVerificationData(emailAddress, memberInfoList.InternalMemberId, ReminderConstants.IsPersonalMember);

                    await MailSend(new MailAddress(emailAddress), token);

                    return(requestMessage.CreateResponse(HttpStatusCode.Accepted,
                                                         new SuccessResponse_MessageId {
                        message_id = messageId
                    }));
                }
                else if (company != null)
                {
                    if (company.member_id == null || company.frame_no == null || company.email == null)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "必須要素が存在しない", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }
                    var memberId = company.member_id;
                    emailAddress = company.email;
                    var vin = company.frame_no;

                    if (memberId.Equals(string.Empty) || memberId.Length > 256)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "会員ID", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }

                    if (emailAddress.Equals(string.Empty) || emailAddress.Length > 256)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "メールアドレス", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }

                    if (vin.Equals(string.Empty) || vin.Length > 20)
                    {
                        PCSiteTraceSource.InvalidRequest_Api("api/reset-password", "VIN", null);
                        return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
                    }

                    //法人の場合00901:テレマサービス汎用操作API.テレマサービス契約情報取得を呼びだす
                    var reminder   = new Toyota.Gbook.WebSite.Authentication.Control.Reminder();
                    var memberInfo = reminder.CheckCompanyMemberExist(memberId, emailAddress, vin);

                    var token = StoreVerificationData(emailAddress, memberInfo.InternalMemberId, ReminderConstants.IsCompanyMember);

                    await MailSend(new MailAddress(emailAddress), token);

                    return(requestMessage.CreateResponse(HttpStatusCode.Accepted,
                                                         new SuccessResponse_MessageId {
                        message_id = messageId
                    }));
                }

                return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
            }
            catch (InvalidJsonException)
            {
                return(requestMessage.CreateResponse(HttpStatusCode.BadRequest));
            }
            catch (UserNotFoundException)
            {
                var encoding    = Encoding.GetEncoding("UTF-8");
                var emailBytes  = encoding.GetBytes(emailAddress);
                var emailBase64 = System.Convert.ToBase64String(emailBytes);
                var ex          = PCSiteTraceSource.UserNotFound_Api(emailBase64);
                var id          = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.Unauthorized,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
            catch (UnexpectedMemberDivisionException)
            {
                var encoding    = Encoding.GetEncoding("UTF-8");
                var emailBytes  = encoding.GetBytes(emailAddress);
                var emailBase64 = System.Convert.ToBase64String(emailBytes);
                var ex          = PCSiteTraceSource.UnexpectedMemberDivision_Api(emailBase64);
                var id          = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.Unauthorized,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
            catch (MissingFileOnBlobException mex)
            {
                var ex = PCSiteTraceSource.FileMissingOnBlob_Api(mex.FileName, mex);
                var id = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
            catch (UnexpectedResultCodeException uex)
            {
                var ex = PCSiteTraceSource.UnexpectedResultCode_Api(uex.api, uex.resultCode);
                var id = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
            catch (GetMemberLoginInfoFailException gex)
            {
                var ex = PCSiteTraceSource.NetworkAccessFail_Api("00000_common/Member.svc/rest/GetMemberLoginInformation", gex);
                var id = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
            catch (TelemaServiceGeneralOperationFailException tex)
            {
                var ex = PCSiteTraceSource.NetworkAccessFail_Api("00000_common/TelemaServiceGeneralOperation.sv/rest/GetTelemaServiceContract", tex);
                var id = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
            catch (WebApplicationFatalException wex)
            {
                var ex = PCSiteTraceSource.MethodFailure(string.Format("パスワードリセットAPIでエラーが発生。URL{0}, レスポンス:{1}", wex.Url, wex.Response));
                var id = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
            catch (Exception e)
            {
                var ex = PCSiteTraceSource.SystemError_Api("パスワードリセットAPIで想定外のエラーが発生", e);
                var id = 0;
                ex.TryGetId(out id);
                return(requestMessage.CreateResponse(HttpStatusCode.InternalServerError,
                                                     new ErrorResponse {
                    Errors = new Dictionary <string, string> {
                        { "code", id.ToString() }
                    }
                }));
            }
        }