Service web ASMX pour autoriser l'accès anonyme
Je suis en train de vivre une autorisation d'erreur pour un service web asmx que j'ai développé. Le service web lui-même ne nécessite pas d'identification de l'utilisateur, mais il semble que le service web est configuré pour le faire valoir, même si j'ai essayé de définir la configuration, comme par exemple pour permettre l'accès anonyme:
J'ai mis le correspondant de site web dans IIS pour permettre l'accès anonyme:
En outre, j'ai inclus les lignes suivantes dans le web.config
:
<configuration>
...
<system.web>
...
<authorization>
<allow users="*"/>
</authorization>
...
</system.web>
...
</configuration>
Lorsque vous essayez d'appeler le service web à partir d'un client de test, j'obtiens ce message d'erreur:
La requête HTTP est autorisée avec
le schéma d'authentification client
"Anonyme". L'en-tête d'authentification
reçu par le serveur était "NTLM".
La ligne de code qui appelle le service web ressemble à ceci:
string message = new ServiceReference1.Service1SoapClient().HelloWorld();
Et le code du service web:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
Quelques points importants:
- Si j'essaye de mettre au client de s'authentifier à l'aide de l'authentification NTLM, il fonctionne très bien.
- Si j'essaye de mettre le client n'a pas à s'authentifier, il échoue avec le message ci-dessus.
- Si j'essaie d'accéder au service web à l'aide d'un navigateur web, j'ai aussi INTERDIT message d'erreur à la place de l'documentation du service web page.
- Si j'exécute le service web à partir de Visual Studio et de configurer le client pour accéder à ce service (localhost...), il fonctionne très bien.
- Voir ci-dessous pour plus de détails
J'ai aussi essayé et mis l'autorisation de la balise à l'intérieur d'un emplacement de la balise pointant vers le service web:
<location path="Service1.asmx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
C'est la façon dont le client de configuration (app.config) ressemble (veuillez noter que, comme mentionné ci-dessus, je ne peux même pas accéder au service à l'aide d'un navigateur web, donc je ne considère que la configuration du client pertinentes):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://name.of.the.server.example.org/Service1.asmx"
binding="basicHttpBinding" bindingConfiguration="Service1Soap"
contract="ServiceReference1.Service1Soap" name="Service1Soap" />
</client>
</system.serviceModel>
</configuration>
Des Idées?
Mise à jour: j'ai trouvé le fichier suivant:
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles\web.config
N'a aucune pertinence pour une application web personnalisée, et si oui, ne pas les paramètres de mon propre site web.config remplacer les paramètres de ce fichier?
Contenu de ce fichier:
<configuration>
<system.web>
<membership>
<providers>
<add name="WebAdminMembershipProvider" type="System.Web.Administration.WebAdminMembershipProvider" />
</providers>
</membership>
<httpModules>
<add name="WebAdminModule" type="System.Web.Administration.WebAdminModule"/>
</httpModules>
<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
</authorization>
<identity impersonate="true"/>
<trust level="Full"/>
<pages validateRequest="true"/>
<globalization uiCulture="auto:en-US" />
</system.web>
</configuration>
Si il y a un autre fichier:
C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\web.config
Et je pense plutôt que c'est le système à l'échelle du web.fichier de configuration. Ce fichier, en fait, permet accès à tous les utilisateurs:
<system.web>
<authorization>
<allow users="*"/>
</authorization>
- Un couple de choses... Pourriez-vous poster le web.section de configuration du client de test qui concerne le côté client de la configuration du service? Aussi, avez-vous essayé de faire la méthode statique sur le côté service? Je sais que dans certains autres contextes (comme les pages aspx), WebMethods doivent être statique, mais je ne me souviens pas de asmx.
- Merci pour votre commentaire. J'ai ajouté un peu plus de détails à mes questions. J'ai également essayé d'accéder via un navigateur web, de sorte que l'application.config peut-être pas trop concerné. J'ai encore ajouté des fins de référence. On ne sait jamais...
- L'utilisateur que vous utilisez pour l'accès anonyme de lecture des droits sur votre dossier?
Vous devez vous connecter pour publier un commentaire.
*
signifie que les utilisateurs authentifiés, vous devez utiliser?
à la place.Essayez de désactiver l'authentification pour l'ensemble du site web:
Faire cette case: créer test.txt fichier et essayez d'y accéder à partir du navigateur web. Voulez-vous obtenir 'Accès Refusé' erreur?
Ensuite, essayez d'ouvrir la non-existante page aspx, par exemple, bla.aspx. Vous devriez obtenir une erreur 404, pas d'Accès Refusé.
Avez-vous vérifié pour un niveau plus élevé de web.config et/ou à la machine.config qui contribuent paramètres de configuration de votre application?
Oui, le serveur doit être configuré pour autoriser l'accès anonyme à votre site.
Le
<allow users="*" />
est tout ce que vous devez faire (à partir de la .net partie).De .Net, vous devez permettre à tous les utilisateurs comme vous l'avez déjà fait. Vous devez également IIS est configuré pour autoriser l'accès anonyme. Comment vous authentifier avec le reste des pages?
Il semble y avoir un problème avec le compte invité internet configuré de façon à utiliser pour l'accès anonyme. Si j'ai mis ce compte à un autre, il fonctionne très bien.