Example #1
0
        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));
        }
Example #3
0
        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);
        }