public async Task <ApiResult <JsonWebToken> > Login([FromQuery] BasicInput basicInput, [FromBody] LoginInput input, [FromServices] ILoginService loginService) { //var validResult = verifyCodeService.CheckCode(input.VerifyCodeId, input.VerifyCode, false); //if (!validResult) //{ // return Result<JsonWebToken>(CommonStatusCode.VerifyCodeError); //} var(code, userInfo) = await loginService.LoginAsync( Request.GetString("appKey"), input.Account.FromBase64String(), input.Password.FromBase64String()); if (code != DefaultStatusCode.Success) { return(Result <JsonWebToken>(code)); } //生成Token var entry = new JwtTokenEntity { AppId = userInfo.AppId.ToString(), UserId = userInfo.Id.ToString(), RoleIds = string.Join(',', userInfo.RoleIds), ClientType = basicInput.ClientType.ToString(), Nickname = userInfo.Nickame, Email = userInfo.Email, Phone = userInfo.Phone }; var token = await _jwtTokenService.CreateTokenAsync(entry); return(Result(DefaultStatusCode.Success, token)); }
public virtual Response <JwtTokenEntity> RefreshToken([FromBody] JwtTokenEntity token) { var principal = GetPrincipalFromExpiredToken(token.AccessToken); var username = principal.Identity.Name; var savedRefreshToken = RetrieveRefreshTokenFromPreferredDataSource(username); if (savedRefreshToken != token.RefreshToken) { throw new SecurityTokenException($"Invalid refresh token."); } var accessToken = GenerateAccessToken(username, out var expires); var refreshToken = GenerateRefreshToken(); SaveRefreshTokenToPreferredDataSource(username, refreshToken); return(new Response <JwtTokenEntity>(true, null, new JwtTokenEntity { AccessToken = accessToken, RefreshToken = refreshToken, ValidUntil = expires })); }