//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 无效", })); } }
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 }); }