Nous avons du mal à comprendre comment fonctionnent ces objets d'informations d'identification. En fait, ils peuvent ne pas fonctionner comme nous nous attendions à ce qu'ils travaillent. Voici une explication du problème actuel.Utilisation de DefaultCredentials et de DefaultNetworkCredentials
Nous avons 2 serveurs qui ont besoin de parler les uns avec les autres via des services Web. Le premier (appelons-le Server01
) a un service Windows en cours d'exécution en tant que compte NetworkService. L'autre Server02
a ReportingServices fonctionnant avec IIS 6.0. Le service Windows sur Server01
essaie d'utiliser le WebService ReportingServices Server02
pour générer des rapports et les envoyer par courrier électronique.
Donc, voici ce que nous avons essayé jusqu'à présent.
Définition des informations d'identification lors de l'exécution (Cela fonctionne parfaitement bien):
rs.Credentials = new NetworkCredentials("user", "pass", "domain");
Maintenant, si nous pouvions utiliser un utilisateur générique tout irait bien, mais ... nous ne sommes pas autorisés à. Donc, nous essayons d'utiliser les DefaultCredetials ou DefaultNetworkCredentials et le transmettre à la RS Webservice:
rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
Ou:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
De toute façon ne fonctionnera pas. Nous recevons toujours 401 Non autorisé de IIS. Maintenant, ce que nous savons est que si nous voulons donner accès à une ressource connecté en tant que NetworkService, nous devons accorder à DOMAIN\MachineName$
(http://msdn.microsoft.com/en-us/library/ms998320.aspx):
Octroi de l'accès à un serveur SQL distant
Si vous Si vous accédez à une base de données sur un autre serveur du même domaine (ou dans un domaine approuvé), les informations d'identification réseau du compte de service réseau sont utilisées pour s'authentifier auprès de la base de données. Les informations d'identification du compte de service réseau sont de la forme DomainName \ AspNetServer $, où DomainName est le domaine du serveur ASP.NET et AspNetServer est votre nom de serveur Web. Par exemple, si votre application ASP.NET s'exécute sur un serveur nommé SVR1 dans le domaine CONTOSO, le serveur SQL voit une demande d'accès à la base de données à partir de CONTOSO \ SVR1 $.
Nous avons supposé que l'octroi d'accès de la même manière avec IIS fonctionnerait. Cependant, ce n'est pas le cas. Ou au moins, quelque chose n'est pas correctement configuré pour qu'il s'authentifie correctement.
Alors, voici quelques questions:
Nous avons lu à propos de « Usurpation utilisateurs » quelque part, avons-nous besoin de mettre cela quelque part dans le service Windows ?
Est-il possible d'accorder l'accès au compte intégré NetworkService à un serveur IIS distant?
Merci d'avoir lu!
Excellent lien: D – omglolbah
Aurait été agréable d'écrire la réponse réelle à la question en un mot (si possible), au lieu de mettre lien vers l'article de lecture de 2 heures dans le MSDN, et blâmer les autres n'ont pas lu ça :) –
@ d.popov C'est vraiment un défi pour moi de résumer les choses essentielles. Vous pouvez essayer vous-même si cela vous intéresse. Je dois dire que la réponse à la question ne sera pas plus courte que cet article. –