Exemple #1
0
        public User Authenticate(OidcUser oidcUser)
        {
            // Get Identity Provider
            var providerName = "OpenIDConnect";
            AuthenticationProviderElement externalProvider = Config.Get <AuthenticationConfig>().SecurityTokenService
                                                             .AuthenticationProviders.Values
                                                             .FirstOrDefault(x => x.Name == providerName);

            if (externalProvider != null)
            {
                UserManager userManager = UserManager.GetManager(externalProvider.DataProviderName);

                // Find sitefinity user
                var sitefinityUser = userManager.GetUser(oidcUser.Email);

                if (sitefinityUser != null)
                {
                    // Update sitefinity user

                    SystemManager.RunWithElevatedPrivilege(p => {
                        try
                        {
                            UpdateUser(externalProvider.DataProviderName, externalProvider.Name, oidcUser.Email,
                                       oidcUser.Id.ToString(), oidcUser.FirstName, oidcUser.LastName);
                        }
                        catch (Exception ex)
                        {
                            Log.Write($"Failed to update user. Message: {ex.Message}", ConfigurationPolicy.Authentication);
                            throw;
                        }
                    });
                }
                else
                {
                    // Create sitefinity user

                    SystemManager.RunWithElevatedPrivilege(p => {
                        try
                        {
                            CreateUser(externalProvider.DataProviderName, externalProvider.Name, oidcUser.Email,
                                       oidcUser.Id.ToString(), oidcUser.FirstName, oidcUser.LastName);
                        }
                        catch (Exception ex)
                        {
                            Log.Write($"Failed to create user. Message: {ex.Message}", ConfigurationPolicy.Authentication);
                            throw;
                        }
                    });
                }

                sitefinityUser = userManager.GetUser(oidcUser.Email);

                return(sitefinityUser);
            }

            return(null);
        }
        private void Notify(OidcUser user)
        {
            var state = user.ToAuthenticationState();

            NotifyAuthenticationStateChanged(Task.FromResult(state));
        }
 private void OnUserChanged(OidcUser user) => Notify(user);