Example #1
0
        /// <summary>
        /// 社員情報を取得する_ログイン用
        /// </summary>
        /// <returns></returns>
        public IEnumerable <MST_EMP> FetchEMPInfo_ToAuth_Service(string postedEMP_NO)
        {
            //                ↓はxml内に記述されたSQLの「#」で括られた部分
            var param = new { EMP_NO = postedEMP_NO };

            return(MST_EMP_Repository.FetchEMPInfo_ToAuth_Repository(param));
        }
Example #2
0
        /// <summary>
        /// 渡されたトークンを検証するメソッド
        /// トークンの内容は
        /// aud: 空
        /// iss: empno(社員のID)
        /// exp: 期限切れ
        /// </summary>
        /// <param name="empid"></param>
        /// <returns></returns>
        public static bool InspectToken_direct(string token)
        {
            if (string.IsNullOrEmpty(token))
            {
                return(false);
            }

            //DBよりトークン文字列とトークン生成日付を取得
            //                ↓はxml内に記述されたSQLの「#」で括られた部分
            var    param         = new { ACCESS_TOKEN = token };
            string Inspectresult = MST_EMP_Repository.InspectAccessToken_Repository(param);

            return(Inspectresult == "Valid"? true : false);
        }
Example #3
0
        /// <summary>
        /// 共通鍵で署名されたトークンを検証するメソッド_test
        /// トークンの内容は
        /// aud: 空
        /// iss: empno(社員のID)
        /// exp: 期限切れ
        /// </summary>
        /// <param name="empid"></param>
        /// <returns></returns>
        public static bool InspectToken(string empid)
        {
            //DBよりトークン文字列とトークン生成日付を取得
            //                ↓はxml内に記述されたSQLの「#」で括られた部分
            var param           = new { EMP_NO = empid };
            var resultModelData = MST_EMP_Repository.FetchAccessToken_Repository(param).First();
            // 復号鍵文字列
            var keyString = resultModelData.TOKEN_CREATE_DATE.ToString() + FetchTokenPublicKeyString() + empid;
            // 検証用正解トークン文字列
            var tokenString = resultModelData.ACCESS_TOKEN;

            var key = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(keyString));
            // トークン操作用のクラス
            var handler = new System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler();

            // トークン検証用のパラメータを用意
            // Audience, Issuer, Lifetimeに関してはデフォルトで検証が有効になっている
            // audが空でexpが期限切れなのでValidateAudienceとValidateLifetimeはfalseにしておく
            var validationParams = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
            {
                ValidateAudience = false,
                ValidIssuer      = empid,
                ValidateLifetime = false,
                IssuerSigningKey = key,
            };

            try
            {
                Microsoft.IdentityModel.Tokens.SecurityToken token;
                // 第三引数にSecurityToken型の変数を参照で渡しておくと、検証済みのトークンが出力される
                handler.ValidateToken(tokenString, validationParams, out token);

                return(true);
            }
            catch (Exception e)
            {
                // ValidateTokenで検証に失敗した場合はここにやってくる
                return(false);
                //("トークンが無効です: " + e.Message);
            }
        }
Example #4
0
        /// <summary>
        /// トークン作成メソッド_issuerがSCM1_AdminのJWTを生成する
        /// </summary>
        /// <param name="empid"></param>
        /// <returns></returns>
        public static bool CreateToken(string empid)
        {
            // 共通鍵を用意
            var dateKeyString = DateTime.Now.ToString();
            var keyString     = dateKeyString + FetchTokenPublicKeyString() + empid;
            // トークン操作用のクラスを用意
            var handler = new System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler();
            // 共通鍵なのでSymmetricSecurityKeyクラスを使う
            // 引数は鍵のバイト配列
            var key = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(keyString));
            // 署名情報クラスを生成
            // 共通鍵を使うのでアルゴリズムはHS256使っとけばいいはず
            var credentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(key, "HS256");
            // トークンの詳細情報クラス?を生成
            var descriptor = new Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor
            {
                Issuer             = SCMIssuer,
                SigningCredentials = credentials,
            };
            // トークンの生成
            //SecurityTokenDescriptor使わずにhandler.CreateJwtSecurityToken("GHKEN", null, null, null, null, null, credentials)でもOK
            var token = handler.CreateJwtSecurityToken(descriptor);
            // トークンの文字列表現を取得
            var tokenString = handler.WriteToken(token);

            // トークンのDB保存
            try
            {
                //                ↓はxml内に記述されたSQLの「#」で括られた部分
                var param = new { ACCESS_TOKEN = tokenString, TOKEN_CREATE_DATE = dateKeyString, EMP_NO = empid };
                MST_EMP_Repository.StoreAccessToken_Repository(param);

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Example #5
0
 /// <summary>
 /// 社員情報を全件取得する
 /// </summary>
 /// <returns></returns>
 public IEnumerable <MST_EMP> FetchAllEMPInfo_Service()
 {
     return(MST_EMP_Repository.FetchAllEMPInfo_Repository());
 }