private async Task <Tokens> CreateTokenAsync(User user) { List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Name, user.UserName ?? ""), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.NikeName ?? ""), new Claim(ClaimTypes.MobilePhone, user.Mobile ?? "") }; //添加角色信息 //TODO string token = _jsonWebTokenService.Encode(claims); string refreshToken = GenerateToken(); user.LastLoginTime = DateTime.Now; user.RefreshToken = refreshToken; await _userRepository.UpdateAsync(user); var jwtToken = _jsonWebTokenService.Decode(token); return(new Tokens(token, refreshToken, jwtToken["exp"]?.ToString())); }
public void Jwt(string token) { if (token != "" && token.StartsWith("Bearer ")) { token = token.Remove(0, 7); Dictionary <string, object> dict = jsonWebTokenService.Decode(token); JwtPayload JwtPayload = new JwtSecurityTokenHandler().ReadJwtToken(token).Payload; object nameobj = JwtPayload[ClaimTypes.NameIdentifier]; string[] names = JsonConvert.DeserializeObject <string[]>(nameobj.ToString()); object c2 = JwtPayload[ClaimTypes.Name]; object GivenName = JwtPayload[ClaimTypes.GivenName]; string id = JwtPayload.Claims.FirstOrDefault(r => r.Type == ClaimTypes.NameIdentifier)?.Value; } }
public async Task <IActionResult> SignInBindCallBack(string provider, string redirectUrl = "", string token = "") { if (string.IsNullOrWhiteSpace(provider)) { return(BadRequest()); } if (!await HttpContext.IsProviderSupportedAsync(provider)) { return(BadRequest()); } if (token.IsNullOrEmpty() || !token.StartsWith("Bearer ")) { return(Redirect($"{redirectUrl}#bind-result?code={ErrorCode.Fail}&message={HttpUtility.UrlEncode("请先登录")}")); } else { token = token.Remove(0, 7); } AuthenticateResult authenticateResult = await _contextAccessor.HttpContext.AuthenticateAsync(provider); if (!authenticateResult.Succeeded) { return(Redirect($"{redirectUrl}#bind-result?code=fail&message={authenticateResult.Failure.Message}")); } var openIdClaim = authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier); if (openIdClaim == null || string.IsNullOrWhiteSpace(openIdClaim.Value)) { return(Redirect($"{redirectUrl}#bind-result?code={ErrorCode.Fail}&message={HttpUtility.UrlEncode("未能获取openId")}")); } JwtPayload jwtPayload = (JwtPayload)_jsonWebTokenService.Decode(token); string nameIdentifier = jwtPayload.Claims.FirstOrDefault(r => r.Type == ClaimTypes.NameIdentifier)?.Value; if (nameIdentifier.IsNullOrWhiteSpace()) { return(Redirect($"{redirectUrl}#bind-result?code={ErrorCode.Fail}&message={HttpUtility.UrlEncode("请先登录")}")); } long userId = long.Parse(nameIdentifier); UnifyResponseDto unifyResponseDto; List <string> supportProviders = new List <string> { LinUserIdentity.Gitee, LinUserIdentity.GitHub, LinUserIdentity.QQ }; if (!supportProviders.Contains(provider)) { _logger.LogError($"未知的privoder:{provider},redirectUrl:{redirectUrl}"); unifyResponseDto = UnifyResponseDto.Error($"未知的privoder:{provider}!"); } else { IOAuth2Service oAuth2Service = _componentContext.ResolveNamed <IOAuth2Service>(provider); unifyResponseDto = await oAuth2Service.BindAsync(authenticateResult.Principal, provider, openIdClaim.Value, userId); } return(Redirect($"{redirectUrl}#bind-result?code={unifyResponseDto.Code.ToString()}&message={HttpUtility.UrlEncode(unifyResponseDto.Message.ToString())}")); }