コード例 #1
0
        public async Task <IActionResult> Refresh(
            [FromBody] RefreshTokenDto dto)
        {
            var principal = _tokenService
                            .GetPrincipalFromExpiredToken(dto.AccessToken);

            if (principal is null)
            {
                return(Unauthorized(_localizer["Invalid credentials."]));
            }

            var userEmail = principal.FindFirstValue(ClaimTypes.Email);
            var user      = await _userManager.FindByEmailAsync(userEmail);

            if (user is null || user.RefreshTokenExpired())
            {
                return(Unauthorized(_localizer["Invalid credentials."]));
            }

            var tokenResponse = _tokenService
                                .GetToken(user, HttpContext.GenerateIpAddress());

            user.RefreshToken           = tokenResponse.RefreshToken;
            user.RefreshTokenExpiryTime = tokenResponse.RefreshTokenExpiryTime;
            await _userManager.UpdateAsync(user);

            return(Ok(new RefreshAccessTokenVm
            {
                AccessToken = tokenResponse.Token,
            }));
        }
コード例 #2
0
        /// <summary>
        /// Creates the asynchronous.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <returns>
        /// The <see cref="Task" />.
        /// </returns>
        public async Task CreateAsync(AuthenticationTokenCreateContext context)
        {
            var clientid = context.Ticket.Properties.Dictionary["as:client_id"];

            if (string.IsNullOrEmpty(clientid))
            {
                return;
            }

            var refreshTokenId = Guid.NewGuid().ToString("n");

            var refreshTokenLifeTime = context.OwinContext.Get <string>("as:clientRefreshTokenLifeTime");

            var token = new RefreshTokenDto
            {
                Token      = DbHelper.GetHash(refreshTokenId),
                ClientId   = clientid,
                Subject    = context.Ticket.Identity.Name,
                IssuedUtc  = DateTime.UtcNow,
                ExpiresUtc = DateTime.UtcNow.AddMinutes(refreshTokenLifeTime.ToInt64())
            };

            context.Ticket.Properties.IssuedUtc  = token.IssuedUtc;
            context.Ticket.Properties.ExpiresUtc = token.ExpiresUtc;

            token.ProtectedTicket = context.SerializeTicket();

            var authRepo = StructuremapMvc.StructureMapDependencyScope.Container.GetInstance <IAuthRepository>();
            var result   = await authRepo.AddRefreshToken(token);

            if (result)
            {
                context.SetToken(refreshTokenId);
            }
        }
コード例 #3
0
        public AccessGrantDto RefreshToken(RefreshTokenDto refreshTokenDto)
        {
            // Validate old access token.
            var tokenValidationParameters = new TokenValidationParameters
            {
                ValidateAudience         = false,
                ValidateIssuer           = false,
                ValidateIssuerSigningKey = true,
                ValidateLifetime         = false,
                IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_generalSettings.JwtKey))
            };

            var                 tokenHandler  = new JwtSecurityTokenHandler();
            SecurityToken       securityToken = null;
            IEnumerable <Claim> claims        = null;

            try
            {
                claims = tokenHandler.ValidateToken(refreshTokenDto.AccessToken, tokenValidationParameters, out securityToken).Claims;
            }
            catch (Exception)
            {
                throw new UnauthorizedException("Invalid access token");
            }

            var jwtSecurityToken = securityToken as JwtSecurityToken;

            if (jwtSecurityToken == null || !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase))
            {
                throw new UnauthorizedException("Invalid access token");
            }

            // Validate refresh token
            var authTokenId = claims.FirstOrDefault(c => c.Type == AuthClaimTypes.AuthTokenId).Value;
            var authToken   = _mainContext.AuthTokens.Find(int.Parse(authTokenId));

            if (authToken == null || authToken.RereshToken != refreshTokenDto.RefreshToken || authToken.Expiry < DateTime.Now)
            {
                throw new UnauthorizedException("Invalid refresh token.");
            }

            // Update auth token in database
            var refreshToken = GenerateRefreshToken();

            authToken.RereshToken = refreshToken;
            authToken.Expiry      = DateTime.Now.AddDays(_generalSettings.RefreshTokenExpiresIn);
            _mainContext.SaveChanges();

            // Generate access token
            var accessToken = GenerateAccessToken(claims.ToArray());
            var userId      = int.Parse(claims.FirstOrDefault(c => c.Type == AuthClaimTypes.UserId).Value);

            return(new AccessGrantDto
            {
                TokenType = "Bearer",
                AccessToken = accessToken,
                RefreshToken = refreshToken,
                JwtExpiresIn = _generalSettings.JwtExpiresIn
            });
        }
コード例 #4
0
        public ActionResult RefreshToken([FromBody] RefreshTokenDto request)
        {
            if (request.Token == null && request.RefreshToken == null)
            {
                return(BadRequest("Invalid Request"));
            }

            //这儿是验证Token的代码
            var handler = new JwtSecurityTokenHandler();

            try
            {
                ClaimsPrincipal claim = handler.ValidateToken(request.Token, new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_tokenParameter.Secret)),
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ValidateLifetime         = false,
                }, out SecurityToken securityToken);

                var username = claim.Identity.Name;

                //这儿是生成Token的代码
                var token = GenUserToken(username, "testUser");

                var refreshToken = "654321";//改成随机的

                return(Ok(new[] { token, refreshToken }));
            }
            catch (Exception)
            {
                return(BadRequest("Invalid Request"));
            }
        }
コード例 #5
0
        public async Task <IActionResult> RefreshTokenWithoutAuthToken(RefreshTokenDto refreshTokenDto)
        {
            IEnumerable <KeyValuePair <string, string> > keyValuePairs = new Dictionary <string, string> {
                { "grant_type", "refresh_token" }, { "client_id", "Authentication" }, { "client_secret", "clientsecret" }, { "scope", "api.sample offline_access" }, { "refresh_token", refreshTokenDto.RefreshToken }
            };
            var        domin      = ContextHelper.GetDomin();
            AccesToken accesToken = await HttpClientHelper.PostFormUrlEncoded <AccesToken>($"{domin.AbsoluteUri}connect/token", keyValuePairs);

            if (!string.IsNullOrWhiteSpace(accesToken.access_token))
            {
                return(Ok(new ReturnDto()
                {
                    Data = accesToken,
                    ErrorData = null,
                    Status = true
                }));
            }

            return(Ok(new ReturnDto()
            {
                Data = null,
                ErrorData = null,
                Status = false
            }));;
        }
コード例 #6
0
        public async Task <IActionResult> Refresh([FromBody] RefreshTokenDto tokenDto)
        {
            if (tokenDto is null)
            {
                return(BadRequest(new AuthResponseDto {
                    IsAuthSuccessful = false, ErrorMessage = "Invalid client request"
                }));
            }

            var principal = _tokenService.GetPrincipalFromExpiredToken(tokenDto.Token);
            var username  = principal.Identity.Name;

            var user = await _userManager.FindByNameAsync(username);

            if (user == null || user.RefreshToken != tokenDto.RefreshToken || user.RefreshTokenExpiryTime <= DateTime.Now)
            {
                return(BadRequest(new AuthResponseDto {
                    IsAuthSuccessful = false, ErrorMessage = "Invalid client request"
                }));
            }

            var signingCredentials = _tokenService.GetSigningCredentials();
            var claims             = await _tokenService.GetClaims(user);

            var tokenOptions = _tokenService.GenerateTokenOptions(signingCredentials, claims);
            var token        = new JwtSecurityTokenHandler().WriteToken(tokenOptions);

            user.RefreshToken = _tokenService.GenerateRefreshToken();

            await _userManager.UpdateAsync(user);

            return(Ok(new AuthResponseDto {
                Token = token, RefreshToken = user.RefreshToken, IsAuthSuccessful = true
            }));
        }
コード例 #7
0
ファイル: AuthController.cs プロジェクト: becheery/CoinTask
        public async Task <IActionResult> RefreshToken(RefreshTokenDto refreshTokenDto)
        {
            var user = await _applicationRepository.FindUserByRefreshToken(refreshTokenDto.RefreshToken);

            if (user == null)
            {
                return(BadRequest("No user matches to that token"));
            }

            if (!_tokenHelperRepository.ValidateRefreshToken(user.RefreshTokenExpireTime))
            {
                return(BadRequest("Your refresh token has expired"));
            }

            user.RefreshToken           = _tokenHelperRepository.GenerateRefreshToken();
            user.RefreshTokenExpireTime = DateTime.Now.AddMinutes(10);

            _applicationRepository.Update(user);
            await _applicationRepository.SaveAll();

            var token = _tokenHelperRepository.GenerateAccessToken(user);

            return(Ok(new {
                token = token,
                refreshToken = user.RefreshToken
            }));
        }
コード例 #8
0
        public async Task <IActionResult> Refresh([FromBody] RefreshTokenDto tokenDto)
        {
            if (tokenDto is null)
            {
                return(BadRequest(new AuthResponseDto {
                    IsAuthSuccessful = false, ErrorMessage = _localizer[resources.UsuarioAutenticacao].Value
                }));
            }

            var principal       = _tokenService.GetPrincipalFromExpiredToken(tokenDto.Token);
            var username        = principal.Identity.Name;
            var usuarioIdentity = await _userManager.FindByNameAsync(username);

            var signingCredentials = _tokenService.GetSigningCredentials();
            var claims             = await _tokenService.GetClaims(usuarioIdentity);

            var tokenOptions = _tokenService.GenerateTokenOptions(signingCredentials, claims);
            var token        = new JwtSecurityTokenHandler().WriteToken(tokenOptions);

            usuarioIdentity.RefreshToken           = _tokenService.GenerateRefreshToken();
            usuarioIdentity.RefreshTokenExpiryTime = DateTime.Now.AddDays(7);
            await _userManager.UpdateAsync(usuarioIdentity);

            return(Ok(new AuthResponseDto {
                Token = token, RefreshToken = usuarioIdentity.RefreshToken, IsAuthSuccessful = true
            }));
        }
コード例 #9
0
        public async Task <IHttpActionResult> Auth([FromBody] LoginDto login)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = await _unitOfWork.Repository <User>().FindAsync(t => t.Email == login.Email && t.Password == login.Password);

            if (user == null)
            {
                return(NotFound());
            }

            if (!user.IsActived)
            {
                return(StatusCode(System.Net.HttpStatusCode.Forbidden));
            }

            var accessToken = new AccessTokenDto()
            {
                AT_UserId = user.Id, AT_Time = DateTime.Now
            };
            var refreshToken = new RefreshTokenDto()
            {
                RT_UserId = user.Id, RT_Time = DateTime.Now, RT_AccessToken = accessToken
            };

            return(Ok(new { accessToken = Encrypt.EncryptAccessToken(accessToken), refreshToken = Encrypt.EncryptRefreshToken(refreshToken) }));
        }
コード例 #10
0
        public async Task CreateAsync(AuthenticationTokenCreateContext context)
        {
            var refreshTokenId = Guid.NewGuid().ToString("n");

            if (context.Ticket == null)
            {
                context.Response.StatusCode   = 400;
                context.Response.ContentType  = "application/json";
                context.Response.ReasonPhrase = "invalid refresh token";
                return;
            }

            IRefreshTokenService refreshTokenService = ResolverFactory.GetService <RefreshTokenService>();

            var client = context.OwinContext.Get <Client>("oauth:client");

            var token = new RefreshTokenDto()
            {
                RefreshTokenId = UnitHelper.GetHash(refreshTokenId),
                Subject        = context.Ticket.Identity.Name,
                IssuedUtc      = DateTime.UtcNow,
                ExpiresUtc     = DateTime.UtcNow.AddDays(client.RefreshTokenLifeTime)
            };

            context.Ticket.Properties.IssuedUtc = token.IssuedUtc;

            context.Ticket.Properties.ExpiresUtc = token.ExpiresUtc;

            token.ProtectedTicket = context.SerializeTicket();

            await refreshTokenService.CreateAsync(token);

            context.SetToken(refreshTokenId);
        }
コード例 #11
0
        public async Task <AuthenticateResponseDto> RefreshToken(RefreshTokenDto model)
        {
            var refreshTokenEntity = await _context.RefreshTokens.Where(x => x.Email == model.Email).Include(x => x.User).SingleOrDefaultAsync();

            if (refreshTokenEntity is null)
            {
                throw new LaprTrackrException(LaprTrackrStatusCodes.AuthNotAuhenticated, "Refresh token is not valid.");
            }

            if ((DateTime.Now - refreshTokenEntity.CreatedAt).TotalDays > 7)
            {
                throw new LaprTrackrException(LaprTrackrStatusCodes.AuthNotAuhenticated, "Refresh token is expired.");
            }

            var(token, refreshToken) = GenerateJSONWebToken(refreshTokenEntity.User);
            var authenticateResponseDto = new AuthenticateResponseDto
            {
                Token        = token,
                RefreshToken = refreshToken,
                User         = refreshTokenEntity.User
            };

            await SaveRefreshToken(refreshTokenEntity.User, token, refreshToken);

            return(authenticateResponseDto);
        }
コード例 #12
0
        public void Is_Correct_RefreshTokenDto_Mapped_Object()
        {
            //arrange
            var refreshToken = new RefreshToken
            {
                Id = "1234",
                ProtectedTicket = "1234",
                ClientId        = "1234",
                ExpiresUtc      = DateTime.Today.AddDays(1),
                IssuedUtc       = DateTime.Today,
                Subject         = "michal"
            };

            var refreshTokenDto = new RefreshTokenDto
            {
                Id = "1234",
                ProtectedTicket = "1234",
                ClientId        = "1234",
                ExpiresUtc      = DateTime.Today.AddDays(1),
                IssuedUtc       = DateTime.Today,
                Subject         = "michal"
            };
            var dtoFactory = new RefreshTokenFactory();

            //act
            var target = dtoFactory.GetModel <RefreshTokenDto>(refreshToken);

            //assert
            Assert.IsInstanceOf <RefreshTokenDto>(target);
            Assert.AreEqual(refreshTokenDto.ProtectedTicket, target.ProtectedTicket);
        }
コード例 #13
0
        public bool Update(string entityId, RefreshTokenDto entity)
        {
            var success = false;

            if (entity != null)
            {
                using (var scope = Repository.DatabaseFacade.BeginTransaction())
                {
                    var refreshToken = Repository.GetByID(entityId);
                    if (refreshToken != null)
                    {
                        try
                        {
                            var item = Mapper.Map(entity, refreshToken);
                            Repository.Update(item);
                            Repository.SaveChanges();
                            scope.Commit();
                            success = true;
                        }
                        catch (Exception e)
                        {
                            throw e;
                        }
                    }
                }
            }
            return(success);
        }
コード例 #14
0
        public async Task CreateAsync(AuthenticationTokenCreateContext context)
        {
            var clientid = context.Ticket.Properties.Dictionary["as:client_id"];

            if (string.IsNullOrEmpty(clientid))
            {
                return;
            }

            var refreshTokenId       = _refreshTokenService.GenerateRefreshTokenId();
            var refreshTokenLifeTime = context.OwinContext.Get <string>("as:clientRefreshTokenLifeTime");

            var token = new RefreshTokenDto
            {
                Id         = refreshTokenId,
                ClientId   = clientid,
                Subject    = context.Ticket.Identity.Name,
                IssuedUtc  = DateTime.UtcNow,
                ExpiresUtc = DateTime.UtcNow.AddMinutes(Convert.ToDouble(refreshTokenLifeTime))
            };

            context.Ticket.Properties.IssuedUtc  = token.IssuedUtc;
            context.Ticket.Properties.ExpiresUtc = token.ExpiresUtc;

            token.ProtectedTicket = context.SerializeTicket();

            var newToken = await _refreshTokenService.AddAsync(token);

            if (await _refreshTokenService.Exists(newToken.Id))
            {
                context.SetToken(refreshTokenId);
            }
        }
コード例 #15
0
        public async Task <ServiceResponse <UserCredentialDto> > RefreshAsync(RefreshTokenDto refreshDto)
        {
            var response = new ServiceResponse <UserCredentialDto>();

            try
            {
                var refreshToken = refreshDto.RefreshToken;
                var email        = refreshDto.Email;

                var dbRefreshToken = await _context.RefreshTokens
                                     .FirstOrDefaultAsync(x =>
                                                          x.Token == refreshToken &&
                                                          DateTime.Compare(x.ExpiredAt, DateTime.UtcNow) >= 0 &&
                                                          x.Email == email);

                var dbUser = await _context.Set <T>().FirstOrDefaultAsync(x => x.Email == email);

                if (dbRefreshToken == null || dbUser == null)
                {
                    throw new RefreshTokenExpiredException();
                }

                _context.RefreshTokens.Remove(dbRefreshToken);
                var newRefreshToken = CreateRefreshToken(email);

                await _context.RefreshTokens.AddAsync(newRefreshToken);

                await _context.SaveChangeWithValidationAsync();

                var expiredAt = DateTime.UtcNow.AddMinutes(15);

                response.Data = new UserCredentialDto()
                {
                    AccessToken  = CreateToken(dbUser, expiredAt),
                    RefreshToken = newRefreshToken.Token,
                    ExpiredAt    = expiredAt,
                    UserInfo     = _mapper.Map <GetUserDto>(dbUser),
                };

                return(response);
            }
            catch (BaseServiceException ex)
            {
                _logger.LogError(ex.Message, ex.StackTrace);
                response.Success = false;
                response.Message = ex.ErrorMessage;
                response.Code    = ex.Code;

                return(response);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message, ex.StackTrace);
                response.Success = false;
                response.Message = ex.Message;
                response.Code    = ErrorCode.AUTH_UNEXPECTED_ERROR;

                return(response);
            }
        }
コード例 #16
0
        public async Task <IActionResult> Post(RefreshTokenDto dto)
        {
            var handler = new JwtSecurityTokenHandler();
            var cp      = handler.ReadJwtToken(dto.OldJwtToken);

            if (string.IsNullOrEmpty(cp.Id))
            {
                var user = await UserManager.FindByIdAsync(cp.Payload.Claims.FirstOrDefault (x => x.Type.Equals(JwtRegisteredClaimNames.Sid)).Value);

                if (user != null && user.RefreshToken.Equals(dto.RefreshToken) && user.RefreshTokenExpiration >= DateTime.Now)
                {
                    var expiration = 30;
                    var token      = JwtHelper.GenerateToken(
                        user,
                        Environment.GetEnvironmentVariable(EnvVars.JwtKey),
                        Configuration["JwtTokenConfig:Issuer"],
                        Configuration["JwtTokenConfig:Audience"], expiration);

                    var refreshToken = _tokenFactory.GenerateRefreshToken();
                    user.AddRefreshToken(refreshToken, 10);
                    await DbContext.SaveChangesAsync();

                    return(Ok(new LoginResultDto("Bearer", token, refreshToken, DateTime.Now.AddDays(expiration), user.UserType, user.Name)));
                }
            }

            AddMessage("Token", "Token inválido");
            return(BadRequest());
        }
コード例 #17
0
        public async Task <IActionResult> CreateTokenByRefreshToken(RefreshTokenDto refreshTokenDto)

        {
            var result = await _authenticationService.CreateTokenByRefreshToken(refreshTokenDto.Token);

            return(ActionResultInstance(result));
        }
コード例 #18
0
        public async Task <IActionResult> Login([FromBody] LoginUserDto loginUserDto)
        {
            if (loginUserDto == null)
            {
                return(BadRequest(_config["Errors:Base:ModelInValid"]));
            }

            // Validation model dto
            var validatorDto = new LoginUserDtoValidator();

            var resultValidateDto = validatorDto.Validate(loginUserDto);

            if (!resultValidateDto.IsValid)
            {
                return(BadRequest(ValidationDto.GetMessagesByErrors(resultValidateDto.Errors)));
            }

            // Verify Account
            var userDto = await _userService.VerifyAccount(loginUserDto);

            if (userDto == null)
            {
                return(BadRequest(_config["Errors:User:Incorrect"]));
            }

            // Create Refresh Token
            RefreshTokenDto refreshTokenDto = await _tokenService.CreateRefreshTokenByUserDtoAsync(userDto);

            // Generate token
            var tokenDto = GenerateToken(userDto, refreshTokenDto.RefreshToken);

            return(Ok(tokenDto));
        }
コード例 #19
0
        public async Task CreateRefreshTokenAsync(RefreshTokenDto tokenDto)
        {
            var token = Mapper.Map <RefreshToken>(tokenDto);
            await _refreshTokenRepository.AddAsync(token);

            await UnitOfWork.CommitAsync();
        }
コード例 #20
0
ファイル: TpUserControllerImpl.cs プロジェクト: htschan/Tp
        public Task <SwaggerResponse <AuthResponse> > RefreshtokenAsync(RefreshTokenDto refreshtokenparameter)
        {
            var headers = new Dictionary <string, IEnumerable <string> >();

            try
            {
                var authResponse = _appUser.RefreshToken(refreshtokenparameter);
                return(Task.FromResult(
                           new SwaggerResponse <AuthResponse>(
                               StatusCodes.Status200OK,
                               headers,
                               new AuthResponse {
                    Token = authResponse.authToken, ValidFor = authResponse.expiresIn, Id = authResponse.id, Refreshtoken = authResponse.refreshToken, Status = new OpResult {
                        Success = true, Result = "RefreshToken successful"
                    }
                })));
            }
            catch (RepositoryException exception)
            {
                return(Task.FromResult(
                           new SwaggerResponse <AuthResponse>(
                               exception.StatusCode,
                               headers,
                               new AuthResponse {
                    Token = "failed to refresh", Status = new OpResult {
                        Success = false, Result = "RefreshToken failed"
                    }
                }, exception.Message)));
            }
        }
コード例 #21
0
ファイル: AuthController.cs プロジェクト: visokaaa/CoinCapAPI
        public async Task <IActionResult> RefreshToken(RefreshTokenDto refreshTokenDto)
        {
            var user = await _applicationRepository.FindUserByRefreshToken(refreshTokenDto.RefreshToken);

            if (user == null)
            {
                return(BadRequest("Couldn't find a user with that refresh token"));
            }

            if (!ValidateRefreshToken(user.RefreshTokenExpireTime))
            {
                return(BadRequest("Your refresh token has expired"));
            }

            user.RefreshToken           = GenerateRefreshToken();
            user.RefreshTokenExpireTime = DateTime.Now.AddMinutes(10);

            _applicationRepository.Update(user);
            await _applicationRepository.SaveAll();

            var token = GenerateJWTToken(user);

            return(Ok(new {
                token = token,
                refreshToken = user.RefreshToken
            }));
        }
コード例 #22
0
        public async Task Delete(Guid userUuid)
        {
            RefreshTokenDto refreshTokenToDelete = await _context.RefreshToken
                                                   .FirstOrDefaultAsync(rt => rt.UserUuid == userUuid);

            _context.RefreshToken.Remove(refreshTokenToDelete);
            await _context.SaveChangesAsync();
        }
コード例 #23
0
ファイル: UserController.cs プロジェクト: a-molaei/My_SSO
 public IActionResult RefreshToken(RefreshTokenDto dto)
 {
     if (User?.Identity?.Name == null)
     {
         return(Unauthorized());
     }
     return(new ObjectResult(JwtHandler.Create(User.Identity.Name, SecurityLevel, dto.ApplicationId, 0)));
 }
コード例 #24
0
        public IActionResult Post([FromBody] RefreshTokenDto refreshTokenDto)
        {
            int      expiryMinutes = 30;
            DateTime expiryDate    = DateTime.Now.AddMinutes(expiryMinutes);

            string jwtToken = this._jwtService.RefreshToken(User.Claims.ToArray(), expiryMinutes);

            return(this.Ok(new JwtDetails(jwtToken, expiryDate)));
        }
コード例 #25
0
        private bool RefreshTokenIsExpired(RefreshTokenDto refreshToken)
        {
            if (refreshToken.ExpirationDate < DateTime.UtcNow)
            {
                return(true);
            }

            return(false);
        }
コード例 #26
0
        public async Task <ActionResult> RefreshToken(RefreshTokenDto tokenDto)
        {
            var token = await jwtService.RefreshToken(tokenDto.RefreshToken);

            if (token == null)
            {
                return(Unauthorized(new { message = "Invalid token" }));
            }
            return(Ok(token));
        }
コード例 #27
0
        public async Task <IActionResult> RefreshToken(RefreshTokenDto tokens)
        {
            var authenticationResponse = await accountService.RefreshToken(tokens, Request.Headers[HeaderNames.UserAgent].ToString());

            if (authenticationResponse == null)
            {
                return(BadRequest <RefreshTokenDto>(r => r.RefreshToken, LocalizedResources.RefreshTokenError));
            }
            return(Ok(authenticationResponse));
        }
コード例 #28
0
        public async Task <IActionResult> Refreshtoken([FromBody] RefreshTokenDto refreshtokenparameter)
        {
            if (!ModelState.IsValid)
            {
                return(HandleInvalidModelState(ModelState));
            }
            var result = await _implementation.RefreshtokenAsync(refreshtokenparameter).ConfigureAwait(false);

            return(ProcessResponse <AuthResponse>(result));
        }
コード例 #29
0
        public async Task <ResponseTokenModel> RefreshToken([FromBody] RefreshTokenDto input)
        {
            ResponseTokenModel model = new ResponseTokenModel
            {
                Success     = false,
                SetPassword = true
            };

            if (input == null)
            {
                model.Msg = L("UserCenter_ParamError");
                return(model);
            }
            if (string.IsNullOrWhiteSpace(input.ClientId))
            {
                model.Msg = L("UserCenter_ParamError");
                return(model);
            }

            var form = new Dictionary <string, string>();

            form["client_id"]     = input.ClientId;
            form["refresh_token"] = _cacheManager.GetCache(CacheKeyService.RefreshToken).Get(input.ClientId + input.UserId, () => string.Empty);

            //用户登陆
            if (input.ClientId == "app_customer_client")
            {
                form["client_secret"] = _appConfiguration["Customer:ClientSecrets"];
                form["grant_type"]    = "refresh_token";
            }
            //医生登陆
            if (input.ClientId == "app_doctor_client")
            {
                form["client_secret"] = _appConfiguration["Doctor:ClientSecrets"];
                form["grant_type"]    = "refresh_token";
            }

            var tokenModel = await _tokenService.RefreshToken(form, input.ClientId);

            if (tokenModel != null)
            {
                model.Success     = true;
                model.AccessToken = tokenModel.access_token;
                model.ExpiresIn   = tokenModel.expires_in;
                model.TokenType   = tokenModel.token_type;
                model.UserId      = input.UserId;

                List <string> proToken = _cacheManager.GetCache(CacheKeyService.DeviceToken).Get(input.ClientId + input.UserId + input.DeviceUUID, () => new List <string>());
                proToken.Add(tokenModel.access_token);
                _cacheManager.GetCache(CacheKeyService.DeviceToken).Set(input.ClientId + input.UserId + input.DeviceUUID, proToken);
                _cacheManager.GetCache(CacheKeyService.RefreshToken).Set(input.ClientId + input.UserId, tokenModel.refresh_token);
            }

            return(model);
        }
コード例 #30
0
        private async Task <AuthenticationResponse> GenerateAuthenticationResponse(User user)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var key          = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.Secret));
            var credentials  = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);

            var roles = await _userManager.GetRolesAsync(user);

            var claims = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.Sub, user.Email),
                new Claim(JwtRegisteredClaimNames.Email, user.Email),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim("id", user.Id)
            };

            ClaimsIdentity claimsIdentity = new ClaimsIdentity(claims, "Token");

            // Adding roles code
            // Roles property is string collection but you can modify Select code if it it's not
            claimsIdentity.AddClaims(roles.Select(role => new Claim(ClaimTypes.Role, role)));

            var tokenDesriptor = new SecurityTokenDescriptor
            {
                Subject            = claimsIdentity,
                Issuer             = _jwtSettings.Issuer,
                Audience           = _jwtSettings.Audience,
                Expires            = DateTime.UtcNow.AddMinutes(_jwtSettings.AccessExpiration),
                SigningCredentials = credentials
            };

            var token = tokenHandler.CreateToken(tokenDesriptor);

            var refreshToken = new RefreshTokenDto
            {
                JwtId          = token.Id,
                UserId         = user.Id,
                CreationDate   = DateTime.UtcNow,
                Invalidated    = false,
                Used           = false,
                ExpirationDate = DateTime.UtcNow.AddDays(_jwtSettings.RefreshExpiration)
            };

            var createdRefreshToken = _refreshTokenLogic.Create(refreshToken);

            var jwtToken = tokenHandler.WriteToken(token);

            var authenticationResponse = new AuthenticationResponse
            {
                Token        = jwtToken,
                RefreshToken = createdRefreshToken.Token
            };

            return(authenticationResponse);
        }