Question

J'ai une application Web assez complexe qui a été conçue (par un contractant) pour utiliser l'authentification intégrée. Dans le cadre du processus d'authentification, une fonction GetNetworkID () est utilisée, qui ressemble à ceci:

private string GetNetworkID()
{
    return HttpContext.Current.User.Identity.Name.Split(new char[] { '\\' })[1];
}

Lorsque je lance ceci sur ma zone de développement, la valeur HttpContext.Current.User.Identity.Name est myNetwork \\ myUserID , la fonction ci-dessus renvoie donc mon ID d'utilisateur, comme prévu, et le processus d'authentification fonctionne correctement.

Mais lorsque j'exécute cette opération sur mon serveur Web, un index situé en dehors des limites du tableau est renvoyé par l'instruction return de la fonction GetNetworkID () . .

Je ne sais pas trop comment résoudre ce problème et comment déterminer s'il s'agit d'un problème de configuration IIS (mon serveur Web est une boîte Windows Server 2008 exécutant IIS 7) ou autre chose.

Si je code dans mon ID utilisateur en tant que valeur de retour pour la fonction GetNetworkID () , cela fonctionne sur le serveur Web, mais je n'ai pas de bonne idée sur la façon de déboguer. Le serveur Web détermine ce que la valeur de retour HttpContext.Current.User.Identity.Name est à l'origine de l'erreur d'index du tableau.

Des suggestions?

Était-ce utile?

La solution

IIS s'exécute en tant que compte de service IIS, ainsi Current.User.Identity sera probablement le nom du compte IIS.

Par souci d’exhaustivité, vous devez rechercher '\' à l’aide de Find () ou en appelant split et en vérifiant la longueur du tableau résultant. Si la longueur est égale à 1, cela signifie que l'id n'est pas sous la forme domaine \ nom d'utilisateur.

En général, si vous souhaitez déboguer, vous pouvez écrire n'importe quelle valeur dans le flux de réponse HTTP comme suit:

Response.Write(HttpContext.Current.User.Identity.Name)

Une autre méthode consiste à configurer une variable de page ASP et à définir la variable de page sur la valeur que vous souhaitez inspecter. Vous pouvez afficher la valeur de la variable via le code ASP ou via Javascript.

Autres conseils

Il se peut qu'il manque un paramètre IIS.

Essayez dans IIS: Site Web (clic droit) | Propriétés | Sécurité du répertoire (onglet)

Cliquez sur "Modifier ..."

.

Sélectionnez ensuite "Authentification Windows intégrée"

.

Je pense que l'utilisateur qui se connecte à votre application Web sur l'autre serveur n'est pas un identifiant valide. Et par conséquent, aucun résultat n'est renvoyé sur User.Identity.Name.

Comme vous l'avez dit, cela fonctionne lorsque vous codez en dur le nom d'utilisateur. Cela signifie que les avoirs de l'utilisateur du PC que vous utilisez pour vous connecter ne sont pas autorisés sur votre site. Cela doit donc être différent des informations d'identification que vous codez en dur.

Le mieux est de déboguer sur le serveur Web (ce n'est pas difficile - tout ce que vous voulez retourner est User.Identity.Name et vous pouvez obtenir le nom d'utilisateur et en déduire la logique) et vérifier le contenu de votre site Web. Fichier .config.

Comme Alan l'a souligné (et je l'ai voté pour cela), vous souhaiterez probablement ajouter un contrôle sur la forme que prend User.Identity.Name . Une routine mise à jour pourrait par exemple ressembler à ceci:

private string GetNetworkID()
{
    var name = HttpContext.Current.User.Identity.Name;
    return name.InStr("\\") > -1 ? name.Split("\\")[1] : name;
}

Ceci renverra la deuxième partie du nom de connexion si un \ est présent, et la chaîne complète sinon.

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