2010-01-26 2 views
1

C'est la fonction que j'utilise dans le service Web pour obtenir l'utilisateur Windows actuel. Lorsque j'exécute le service sur localhost, il renvoie vraiment le nom d'utilisateur Windows actuel! Le problème est quand je cours le service à partir du PC à distance, dans ce cas je n'ai rien obtenu de cette fonction. Quel est le problème avec ce service, et comment je peux obtenir le nom de l'utilisateur Windows?Le service Web ne renvoie pas le nom d'utilisateur Windows courant

Merci!

+0

Non, j'utiliser cette fonction: Fonction GetUserName() As String Si TypeOf My.User.CurrentPrincipal est WindowsPrincipal Then 'L'application utilise l'authentification Windows. 'Le format du nom est DOMAIN \ USERNAME. parties Dim() As String = de Split (My.User.Name, "\") nom d'utilisateur Dim As String = parties (1) domaine Dim As String = parties (0) Retour My.User.Name Else Return My.User.Name Fin Si Fin Fonction Mais quand je l'exécute à partir de l'ordinateur distant, je reçois HTTP 500 Erreur interne du serveur! – Comii

Répondre

4

À quoi pensez-vous qu'il retourne: l'identité de l'appelant ? ou l'identité du compte de service qui exécute le service Web?

Dans la plupart des cas, l'identité Windows dépend de la configuration du serveur; utilise-t-il l'usurpation d'identité? De plus, passez-vous l'identité des appelants lorsque vous appelez le service? Par exemple, UseDefaultCredentials ou Credentials. Et le service est-il configuré pour reconnaître les revendications des utilisateurs?

Généralement j'essaie pas pour utiliser l'emprunt d'identité; il nécessite une élévation sur le serveur, ne supporte pas tous les environnements, et peut avoir un impact important sur l'efficacité du pooling - donc je ne m'attendrais pas à ce que l'identité windows coulisse, mais si vous passez l'identité des appelants dans certains Je pourrais m'attendre à ce que le "principal" (Thread.CurrentPrincipal) représente l'appelant. Je ne me souviens pas d'asmx, mais avec WCF, vous pouvez écrire votre propre code pour configurer le principal à partir de votre propre schéma d'authentification si vous le souhaitez.

+0

Merci pour la réponse! J'ai une situation similaire: le service Web est défini sur le serveur! J'ai juste besoin quand l'ordinateur de client exécute ce service, ce client obtiennent le nom d'utilisateur de connexion de fenêtres de l'ordinateur de serveur! Je ne sais pas vraiment ce qui est problème, je suis en mesure d'obtenir le nom de l'ordinateur du serveur, mais pas le nom d'utilisateur. Je suppose que ce problème est quelque part dans les paramètres de sécurité! – Comii

+1

@Comii - dans IIS, il s'agit de l'identité de l'App-Pool hébergeant l'application. –

0

Vous pouvez obtenir l'identité du thread en cours est en cours d'exécution sous par la ligne ci-dessous du code:

System.Threading.Thread.CurrentPrincipal.Identity.Name 
+0

Merci pour la réponse! Il est de retour quand il fonctionne à partir de l'ordinateur distant, tout comme mon code! – Comii

1

Essayez celui

using System.Security.Principal; 

[WebMethod()] 
public string userName() 
{ 
    return User.Identity.Name.ToString(); 
} 
Questions connexes