Puis-je usurper l'identité d'un client authentifié avec Forms Auth et établir une connexion de confiance à SQL Server?

StackOverflow https://stackoverflow.com/questions/4947462

Question

Voici ce que j'ai essayé de faire

Créez une application ASP.NET MVC 3 avec l'authentification des formulaires et l'appartenance Active Directory. Le serveur Web et la base de données sont des serveurs physiques différents, d'où un double saut.

Je pensais que la réponse était cet ancien article sur transition de délégation et de protocole contrainte? Jusqu'à présent, je n'ai pas pu faire fonctionner la technique.

Je teste cela depuis ma machine de développement (Windows 7, IIS7) pour le serveur Web avant de se déployer sur Windows 2008 (IIS7) dans la configuration de la production. Windows 2008 ferait-il une différence?

Ce qui fonctionne et ce qui échoue

Je suis en mesure de me connecter avec Forms Auth et l'adhésion AD. Cela semble fonctionner bien. Lorsque j'essaie de passer un appel de base de données en utilisant ce code:

public void AsUser(Action action)
    {
        using (var id = new WindowsIdentity(User.Identity.Name + @"@example.com"))
        {
            WindowsImpersonationContext context = null;
            try
            {
                context = id.Impersonate();
                action.Invoke();
            }
            catch (Exception ex)
            {
                // ex.Message is The type initializer for System.Data.SqlClient.SqlConnection threw an exception
                // buried inner exeption is Requested registry access is not allowed
            }
            finally
            {
                if (context != null)
                {
                    context.Undo();
                }
            }
        }
    }

Cela échoue avec une exception qui m'amène à croire que j'ai des problèmes de configuration sur mon serveur de développement local. L'exception intérieure est Requested registry access is not allowed.

Si je définis un point d'arrêt et inspecte le WindowsIdentity après le Impersonate() Appelez je vois que le ImpersonationLevel est réglé sur Identification. Cela semble être un indice qu'il n'est pas configuré correctement. Quelqu'un peut-il confirmer?

Suis-je sur la bonne voie et est-ce même possible de configurer? Tous les pointeurs seraient appréciés.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top