//scenario 1 : get the access-token by username and password
        private async Task <ApiResult> DoPasswordAsync(JwtInput input)
        {
            var user = await userManager.FindByNameAsync(input.username);

            if (user == null)
            {
                return(new ApiResult
                {
                    success = false,
                    message = "该用户名不存在",
                });
            }
            var signInResult = await signInManager.CheckPasswordSignInAsync(user, input.password, false);

            if (!signInResult.Succeeded)
            {
                return(new ApiResult
                {
                    success = false,
                    message = "无效的用户名、密码",
                });
            }

            RefreshToken refreshToken = NewRefreshToken(input);

            await dbContext.RefreshTokens.AddAsync(refreshToken);

            var result = new ApiResult
            {
                data = await GetJwt(input.client_id, input.username, refreshToken.Id, settings.Value.ExpireMinutes)
            };
            await dbContext.SaveChangesAsync();

            return(result);
        }
        //scenario 2 : get the access_token by refresh_token
        private async Task <ApiResult> DoRefreshTokenAsync(JwtInput jwtInput)
        {
            var token = await dbContext.RefreshTokens.FindAsync(jwtInput.refresh_token);

            if (token == null)
            {
                return(new ApiResult
                {
                    success = false,
                    message = "无效的refresh_token",
                });
            }

            dbContext.RefreshTokens.Remove(token);
            var refresh_token = NewRefreshToken(jwtInput);
            await dbContext.RefreshTokens.AddAsync(refresh_token);

            var result = new ApiResult
            {
                data = await GetJwt(jwtInput.client_id, token.UserName, refresh_token.Id, settings.Value.ExpireMinutes)
            };
            await dbContext.SaveChangesAsync();

            return(result);
        }
        public async Task <IActionResult> AuthAsync([FromQuery] JwtInput JwtInput)
        {
            if (JwtInput == null)
            {
                return(Json(new ApiResult
                {
                    success = false,
                    message = "请求参数不能为空"
                }));
            }

            if (JwtInput.grant_type == "password")
            {
                return(Json(await DoPasswordAsync(JwtInput)));
            }
            else if (JwtInput.grant_type == "refresh_token")
            {
                return(Json(await DoRefreshTokenAsync(JwtInput)));
            }
            else
            {
                return(Json(new ApiResult
                {
                    message = "无效请求,参数:grant_type 无效",
                }));
            }
        }
Exemple #4
0
 public JwtOutput CreateJwtToken(JwtInput input)
 {
     if (input == null)
     {
         throw new ArgumentNullException("input cannot null");
     }
     return(_jwt.GetJwtToken(input));
 }
        private static RefreshToken NewRefreshToken(JwtInput input)
        {
            var refresh_token = Guid.NewGuid().ToString("N");

            return(new RefreshToken
            {
                Id = refresh_token,
                ClientId = input.client_id,
                Token = refresh_token,
                UserName = input.username
            });
        }