Ejemplo n.º 1
0
        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
            }));
        }