public async Task <ExternalLoginDataDto> GetExternalLoginData(ExternalLoginInfoDto externalLoginInfoDto, IPAddress ip) { var options = GetProviderOptions(externalLoginInfoDto); var client = new TokenClient(options.TokenEndpoint, options.ClientId, options.ClientSecret); var tokenResponse = await client.RequestAuthorizationCodeAsync(externalLoginInfoDto.Code, options.RedirectUrl); var validatedToken = await ValidateOpenIdToken(tokenResponse, externalLoginInfoDto.State, ip, options); if (!validatedToken) { return(null); } var userInfo = await GetUserInfo(tokenResponse.AccessToken, options); return(userInfo != null ? new ExternalLoginDataDto { AccessToken = tokenResponse.AccessToken, ExternalUser = userInfo } : null); }
public async Task <IActionResult> ExternalLogin([FromBody] ExternalLoginInfoDto externalLoginInfoDto) { var userIp = Request.HttpContext.Connection.RemoteIpAddress; var externalData = await _externalLoginService.GetExternalLoginData(externalLoginInfoDto, userIp); return(await HandleExternalInfo(userIp, externalData, ExternalLoginProvider.OpenId)); }
private IProviderOptions GetProviderOptions(ExternalLoginInfoDto externalLoginInfoDto) { var loginProvider = (ExternalLoginProvider)Enum.Parse(typeof(ExternalLoginProvider), externalLoginInfoDto.Provider); IProviderOptions options; if (loginProvider == ExternalLoginProvider.Google) { options = _googleOptions; } else { options = _openIdOptions; } return(options); }