Exemplo n.º 1
0
        public static GetTokenResponseModel getToke(string account, string password)
        {
            GetTokenResponseModel RS = new GetTokenResponseModel();

            try
            {
                //IS4 application/ x - www - form - urlencoded 這個模式 抓取RQ
                //FormUrlEncodedContent 方法,將其轉換成為具有 application/x-www-form-urlencoded 編碼表示格式。
                client.DefaultRequestHeaders.Accept.Add(
                    new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                //  方法一: 使用字串名稱用法
                var formData = new FormUrlEncodedContent(new[] {
                    new KeyValuePair <string, string>("client_id", "socialnetwork"),
                    new KeyValuePair <string, string>("client_secret", "secret"),
                    new KeyValuePair <string, string>("grant_type", "password"),
                    new KeyValuePair <string, string>("username", account),
                    new KeyValuePair <string, string>("password", password)
                });

                HttpResponseMessage response = client.PostAsync($"{Website.Instance.Configuration["URL:IS4"]}", formData).Result;
                RS = JsonConvert.DeserializeObject <GetTokenResponseModel>(response.Content.ReadAsStringAsync().Result);
            }
            catch (Exception ex)
            {
                Website.Instance.logger.FatalFormat($"getToke  Error :{ex.Message},{ex.StackTrace}");
                throw ex;
            }

            return(RS);
        }
        public GetTokenResponseModel Authenticate(UserLoginRequestModel model)
        {
            var user = _userRepository.Where(x => x.Email == model.Email && x.Password == model.Password).FirstOrDefault();

            // Kullanici bulunamadıysa null döner.
            if (user == null)
            {
                return(null);
            }

            // Authentication başarılı ise JWT token üretilir.
            var tokenHandler = new JwtSecurityTokenHandler();

            var key = Encoding.ASCII.GetBytes(_appSettings.Secret);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Name, user.Id.ToString())
                }),
                Expires            = DateTime.Now.AddHours(6),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);

            var resModel = new GetTokenResponseModel();

            resModel.Token      = tokenHandler.WriteToken(token);
            resModel.ExpireTime = DateTime.Now.AddHours(6).ToString("yyyy-MM-ddTHH:mm:ssZ");

            // Sifre null olarak gonderilir.
            resModel.User.Id       = user.Id;
            resModel.User.UserName = user.UserName;

            return(resModel);
        }