private async Task <User> RegisterExternalUserAsync(ExternalAuthUserInfo externalUser)
        {
            var user = await _userRegistrationManager.RegisterAsync(
                externalUser.Name,
                externalUser.Surname,
                externalUser.EmailAddress,
                externalUser.EmailAddress,
                Authorization.Users.User.CreateRandomPassword(),
                true
                );

            user.Logins = new List <UserLogin>
            {
                new UserLogin
                {
                    LoginProvider = externalUser.Provider,
                    ProviderKey   = externalUser.ProviderKey,
                    TenantId      = user.TenantId
                }
            };

            await CurrentUnitOfWork.SaveChangesAsync();

            return(user);
        }
        public override async Task <ExternalAuthUserInfo> GetUserInfo(string accessCode)
        {
            ExternalAuthUserInfo externalAuthUserInfo;

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.UserAgent.ParseAdd("Microsoft ASP.NET Core OAuth middleware");
                client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
                client.Timeout = TimeSpan.FromSeconds(30.0);
                client.MaxResponseContentBufferSize = 10485760L;
                HttpResponseMessage httpResponseMessage = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, GoogleDefaults.UserInformationEndpoint) { Headers = { Authorization = new AuthenticationHeaderValue("Bearer", accessCode) } });

                httpResponseMessage.EnsureSuccessStatusCode();
                JObject user = JObject.Parse(await httpResponseMessage.Content.ReadAsStringAsync());
                externalAuthUserInfo = new ExternalAuthUserInfo()
                {
                    Name         = user.Value <string>("displayName"),
                    EmailAddress = user.Value <JArray>("emails").First().Value <string>("value"),
                    ProviderKey  = user.Value <string>("id"),
                    Provider     = ProviderName,
                    AvatarUrl    = user.Value <JObject>("image").Value <string>("url"),
                };
            }
            return(externalAuthUserInfo);
        }
Exemplo n.º 3
0
        public override async Task <ExternalAuthUserInfo> GetUserInfo(string accessCode)
        {
            string requestUri = QueryHelpers.AddQueryString(QueryHelpers.AddQueryString(QueryHelpers.AddQueryString("https://graph.facebook.com/v2.8/me", "access_token", accessCode), "appsecret_proof", this.GenerateAppSecretProof(accessCode)), "fields", "email,last_name,first_name,middle_name");
            ExternalAuthUserInfo externalAuthUserInfo;

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.UserAgent.ParseAdd("Microsoft ASP.NET Core OAuth middleware");
                client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
                client.DefaultRequestHeaders.Host = "graph.facebook.com";
                client.Timeout = TimeSpan.FromSeconds(30.0);
                client.MaxResponseContentBufferSize = 10485760L;
                HttpResponseMessage async = await client.GetAsync(requestUri);

                async.EnsureSuccessStatusCode();
                JObject user       = JObject.Parse(await async.Content.ReadAsStringAsync());
                string  firstName  = FacebookHelper.GetFirstName(user);
                string  middleName = FacebookHelper.GetMiddleName(user);
                if (!middleName.IsNullOrEmpty())
                {
                    firstName += middleName;
                }
                externalAuthUserInfo = new ExternalAuthUserInfo()
                {
                    Name         = firstName,
                    EmailAddress = FacebookHelper.GetEmail(user),
                    Surname      = FacebookHelper.GetLastName(user),
                    Provider     = "Facebook",
                    ProviderKey  = FacebookHelper.GetId(user)
                };
            }
            return(externalAuthUserInfo);
        }
        private async Task <User> RegisterExternalUserAsync(ExternalAuthUserInfo externalLoginInfo)
        {
            string username;

            using (var providerManager = _externalLoginInfoManagerFactory.GetExternalLoginInfoManager(externalLoginInfo.Provider))
            {
                username = providerManager.Object.GetUserNameFromExternalAuthUserInfo(externalLoginInfo);
            }

            var user = await _userRegistrationManager.RegisterAsync(
                externalLoginInfo.Name,
                externalLoginInfo.Surname,
                externalLoginInfo.EmailAddress,
                username,
                await _userManager.CreateRandomPassword(),
                true,
                null
                );

            user.Logins = new List <UserLogin>
            {
                new UserLogin
                {
                    LoginProvider = externalLoginInfo.Provider,
                    ProviderKey   = externalLoginInfo.ProviderKey,
                    TenantId      = user.TenantId
                }
            };

            await CurrentUnitOfWork.SaveChangesAsync();

            return(user);
        }
        private async Task <User> RegisterExternalUserAsync(ExternalAuthUserInfo externalUser)
        {
            //var user = await _userRegistrationManager.RegisterAsync(
            //    externalUser.Name,
            //    externalUser.Surname,
            //    externalUser.EmailAddress,
            //    externalUser.EmailAddress,
            //    Authorization.Users.User.CreateRandomPassword(),
            //    true
            //);

            //user.Logins = new List<UserLogin>
            //{
            //    new UserLogin
            //    {
            //        LoginProvider = externalUser.Provider,
            //        ProviderKey = externalUser.ProviderKey,
            //        TenantId = user.TenantId
            //    }
            //};

            //await CurrentUnitOfWork.SaveChangesAsync();

            //return user;
            return(null);
        }
Exemplo n.º 6
0
        // Token: 0x06000039 RID: 57 RVA: 0x000024D0 File Offset: 0x000006D0
        public override async Task <ExternalAuthUserInfo> GetUserInfo(string accessCode)
        {
            ExternalAuthUserInfo result;

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.UserAgent.ParseAdd("Microsoft ASP.NET Core OAuth middleware");
                client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
                client.Timeout = TimeSpan.FromSeconds(30.0);
                client.MaxResponseContentBufferSize = 10485760L;
                HttpResponseMessage httpResponseMessage = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, MicrosoftAccountDefaults.UserInformationEndpoint)
                {
                    Headers =
                    {
                        Authorization = new AuthenticationHeaderValue("Bearer", accessCode)
                    }
                });

                httpResponseMessage.EnsureSuccessStatusCode();
                JObject user = JObject.Parse(await httpResponseMessage.Content.ReadAsStringAsync());
                result = new ExternalAuthUserInfo
                {
                    Name         = MicrosoftAccountHelper.GetDisplayName(user),
                    EmailAddress = MicrosoftAccountHelper.GetEmail(user),
                    Surname      = MicrosoftAccountHelper.GetSurname(user),
                    Provider     = "Microsoft",
                    ProviderKey  = MicrosoftAccountHelper.GetId(user)
                };
            }
            return(result);
        }
Exemplo n.º 7
0
        public override async Task <ExternalAuthUserInfo> GetUserInfo(string accessCode)
        {
            var endpoint = QueryHelpers.AddQueryString("https://graph.facebook.com/v2.12/me", "access_token", accessCode);

            endpoint = QueryHelpers.AddQueryString(endpoint, "appsecret_proof", GenerateAppSecretProof(accessCode));
            endpoint = QueryHelpers.AddQueryString(endpoint, "fields", "email,last_name,first_name,middle_name");

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.UserAgent.ParseAdd("Microsoft ASP.NET Core OAuth middleware");
                client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
                client.DefaultRequestHeaders.Host = "graph.facebook.com";
                client.Timeout = TimeSpan.FromSeconds(30);
                client.MaxResponseContentBufferSize = 1024 * 1024 * 10; // 10 MB

                var response = await client.GetAsync(endpoint);

                response.EnsureSuccessStatusCode();

                var payload = JObject.Parse(await response.Content.ReadAsStringAsync());

                var results = new ExternalAuthUserInfo
                {
                    Name         = (string)payload.SelectToken("first_name"),
                    EmailAddress = (string)payload.SelectToken("email"),
                    Surname      = $"{(string)payload.SelectToken("last_name")} {(string)payload.SelectToken("middle_name")}",
                    Provider     = Name,
                    ProviderKey  = (string)payload.SelectToken("id")
                };

                return(results);

                //throw new UserFriendlyException("This Feature is not available in this sample.");
            }
        }
Exemplo n.º 8
0
        private async Task <User> RegisterExternalUserAsync(ExternalAuthUserInfo externalUser)
        {
            /* --- 微信
             * var user = await _userRegistrationManager.RegisterAsync<MemberUser>(
             *  externalUser.Name,
             *  externalUser.Surname,
             *  externalUser.EmailAddress,
             *  externalUser.EmailAddress,
             *  Authorization.Users.User.CreateRandomPassword(),
             *  true
             * );
             *
             * if (externalUser is WechatAuthUserInfo)
             * {
             *  user.SessionKey = (externalUser as WechatAuthUserInfo).SessionKey;
             * }
             *
             * user.Logins = new List<UserLogin>
             * {
             *  new UserLogin
             *  {
             *      LoginProvider = externalUser.Provider,
             *      ProviderKey = externalUser.ProviderKey,
             *      TenantId = user.TenantId
             *  }
             * };
             *
             * await CurrentUnitOfWork.SaveChangesAsync();
             *
             * return user;
             */

            //var user = await _userRegistrationManager.RegisterAsync(
            var user = await _userRegistrationManager.RegisterAsync <MemberUser> (
                // externalUser.Name,
                externalUser.Surname,
                externalUser.EmailAddress,
                externalUser.EmailAddress, // Username
                Authorization.Users.User.CreateRandomPassword(),
                true
                );

            user.Logins = new List <UserLogin>
            {
                new UserLogin
                {
                    LoginProvider = externalUser.Provider,
                    ProviderKey   = externalUser.ProviderKey,
                    TenantId      = user.TenantId
                }
            };

            await CurrentUnitOfWork.SaveChangesAsync();

            return(user);
        }
Exemplo n.º 9
0
        private bool ProviderKeysAreEqual(ExternalAuthenticateModel model, ExternalAuthUserInfo userInfo)
        {
            if (userInfo.ProviderKey == model.ProviderKey)
            {
                return(true);
            }
            ;

            return(userInfo.ProviderKey == model.ProviderKey.Replace("-", "").TrimStart('0'));
        }
Exemplo n.º 10
0
        private async Task <ExternalAuthUserInfo> GetExternalUserInfo(ExternalAuthenticateModel model)
        {
            ExternalAuthUserInfo userInfo = await _externalAuthManager.GetUserInfo(model.AuthProvider, model.ProviderAccessCode);

            if (userInfo.ProviderKey != model.ProviderKey)
            {
                throw new UserFriendlyException(L("CouldNotValidateExternalUser"));
            }

            return(userInfo);
        }
        private async Task <User> RegisterExternalUserAsync(ExternalAuthUserInfo externalUser)
        {
            var user = await _userRegistrationManager.RegisterAsync <MemberUser>(
                externalUser.Name,
                externalUser.Surname,
                externalUser.EmailAddress,
                externalUser.EmailAddress,
                Authorization.Users.User.CreateRandomPassword(),
                true
                );

            if (externalUser is WechatMiniAuthUserInfo)
            {
                user.SessionKey = (externalUser as WechatMiniAuthUserInfo).SessionKey;
            }

            if (externalUser is WechatH5AuthUserInfo)
            {
                //缓存access token 干啥用?
                var h5User = externalUser as WechatH5AuthUserInfo;
                user.WechatH5RefreshToken          = h5User.RefreshToken;
                user.WechatH5RefreshTokenExpiredIn = DateTime.Now.AddDays(30);
                user.NickName = h5User.NickName;
                user.Province = h5User.Province;
                user.City     = h5User.City;
                user.Gender   = h5User.Gender;
                user.Country  = h5User.Country;
                user.HeadLogo = h5User.HeadLogo;
                user.UnionId  = h5User.UnionId;
                user.OpenId   = h5User.OpenId;
            }

            user.Logins = new List <UserLogin>
            {
                new UserLogin
                {
                    LoginProvider = externalUser.Provider,
                    ProviderKey   = externalUser.ProviderKey,
                    TenantId      = user.TenantId
                }
            };

            await CurrentUnitOfWork.SaveChangesAsync();

            return(user);
        }
        /// <summary>
        /// Gets the user information.
        /// </summary>
        /// <param name="accessCode">The access code.</param>
        /// <returns></returns>
        public override async Task <ExternalAuthUserInfo> GetUserInfo(string accessCode)
        {
            var oauthApi            = new OAuthApi();
            var oAuthTokenApiResult = oauthApi.Get(accessCode);

            if (!oAuthTokenApiResult.IsSuccess())
            {
                return(null);
            }
            var weChatUser           = oauthApi.GetUserInfo(oAuthTokenApiResult.AccessToken, oAuthTokenApiResult.OpenId);
            var externalAuthUserInfo = new ExternalAuthUserInfo
            {
                EmailAddress = weChatUser.OpenId + "@test.cn",
                Surname      = weChatUser.NickName,
                ProviderKey  = weChatUser.OpenId,
                Provider     = Name,
                Name         = weChatUser.OpenId
            };

            return(await Task.FromResult(externalAuthUserInfo));
        }
        private async Task <User> RegisterExternalUserAsync(ExternalAuthUserInfo externalLoginInfo)
        {
            var user = await _userRegistrationManager.RegisterAsync(

                externalLoginInfo.FirstName,
                externalLoginInfo.LastName,
                externalLoginInfo.UserName,
                externalLoginInfo.YourName,
                externalLoginInfo.ContentType,
                externalLoginInfo.ContentVolume,
                externalLoginInfo.Industry,
                externalLoginInfo.IsContentShedule,
                externalLoginInfo.CMS,
                externalLoginInfo.Website,
                externalLoginInfo.Company,
                externalLoginInfo.UserType,
                externalLoginInfo.PhoneNumber,
                externalLoginInfo.EmailAddress,
                externalLoginInfo.Password,
                true
                );


            user.Logins = new List <UserLogin>
            {
                new UserLogin
                {
                    LoginProvider = externalLoginInfo.Provider,
                    ProviderKey   = externalLoginInfo.ProviderKey,
                    TenantId      = user.TenantId
                }
            };

            await CurrentUnitOfWork.SaveChangesAsync();

            return(user);
        }
        private async Task <User> RegisterExternalUserAsync(ExternalAuthUserInfo externalUser)
        {
            var user = await _userRegistrationManager.RegisterAsync(
                externalUser.Name,
                externalUser.EmailAddress,
                externalUser.EmailAddress,
                UserManagerment.Users.User.CreateRandomPassword(),
                true
                );

            if (Uri.TryCreate(externalUser.AvatarUrl, UriKind.Absolute, out var uri))
            {
                using (var httpClient = new HttpClient())
                {
                    var avatarBytes = await httpClient.GetByteArrayAsync(uri);

                    var storedFile = new DataFileObject(AbpSession.TenantId, avatarBytes);
                    await _dataFileObjectManager.SaveAsync(storedFile);

                    user.ProfilePictureId = storedFile.Id;
                }
            }
            user.Logins = new List <UserLogin>
            {
                new UserLogin
                {
                    LoginProvider = externalUser.Provider,
                    ProviderKey   = externalUser.ProviderKey,
                    TenantId      = user.TenantId
                }
            };

            await CurrentUnitOfWork.SaveChangesAsync();

            return(user);
        }
 public virtual string GetUserNameFromExternalAuthUserInfo(ExternalAuthUserInfo userInfo)
 {
     return(userInfo.EmailAddress.ToMd5());
 }
Exemplo n.º 16
0
        public async Task <ExternalAuthenticateResultModel> ExternalAuthenticate([FromBody] ExternalAuthenticateModel model)
        {
            var loginResult = await _logInManager.LoginAsync(new UserLoginInfo(model.AuthProvider, model.ProviderKey, model.AuthProvider), GetTenancyNameOrNull());

            if (loginResult.Identity != null)
            {
                await _signInManager.SignInAsync(loginResult.Identity, true);
            }
            await UnitOfWorkManager.Current.SaveChangesAsync();

            switch (loginResult.Result)
            {
            case AbpLoginResultType.Success:
            {
                var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));
                return(new ExternalAuthenticateResultModel
                    {
                        AccessToken = accessToken,
                        EncryptedAccessToken = GetEncrpyedAccessToken(accessToken),
                        ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds
                    });
            }

            case AbpLoginResultType.UnknownExternalLogin:
            {
                var externalUser = new ExternalAuthUserInfo()
                {
                    EmailAddress = model.EmailAddress,
                    Name         = model.Name,
                    Provider     = model.AuthProvider,
                    ProviderKey  = model.ProviderKey,
                    Surname      = model.Surname
                };
                var newUser = await RegisterExternalUserAsync(externalUser);

                if (!newUser.IsActive)
                {
                    return(new ExternalAuthenticateResultModel
                        {
                            WaitingForActivation = true
                        });
                }

                // Try to login again with newly registered user!
                loginResult = await _logInManager.LoginAsync(new UserLoginInfo(model.AuthProvider, model.ProviderKey, model.AuthProvider), GetTenancyNameOrNull());

                if (loginResult.Result != AbpLoginResultType.Success)
                {
                    throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(
                              loginResult.Result,
                              model.ProviderKey,
                              GetTenancyNameOrNull()
                              );
                }

                return(new ExternalAuthenticateResultModel
                    {
                        AccessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity)),
                        ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds
                    });
            }

            default:
            {
                throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(
                          loginResult.Result,
                          model.ProviderKey,
                          GetTenancyNameOrNull()
                          );
            }
            }
        }