ASMX nom d'utilisateur et le mot de passe de sécurité
J'ai une base ASMX de service que je suis en train de le faire fonctionner (je préfère utiliser WCF, mais ne peut pas obtenir le serveur de travailler avec elle). Il fonctionne très bien dans une configuration de la sécurité, mais dès que je tourne sur la sécurité je reçois:
La requête HTTP est autorisée avec le schéma d'authentification client "Anonyme". L'en-tête d'authentification reçues du serveur a été " Basic realm="zone Sécurisée"'.
Ce que je veux, c'est un minimaliste demander à l'utilisateur un nom et un mot de passe type de solution.
Pokeing autour du code avec intellisense ne pas venir avec quelque chose qui ressemble j'ai besoin.
Cette dirait qu'il pourrait être utile, mais il semble être WCF, donc qui sait.
Je viens de réaliser que je peux en faire une démonstration en direct:
ici, c'est le service: http://smplsite.com/sandbox3/Service1.asmx
le nom d'utilisateur est testapp
et le mot de passe est testpw
. J'ai besoin d'une application en ligne de commande qui appelle des fonctions sur ce service.
Befor j'ai ajouté de la sécurité, de cette ligne a travaillé dans une base VS projet après l'exécution de Add Web Service Reference
sur cette URL
new ServiceReference1.Service1SoapClient().HelloMom("Bob");
C'est ma tentative (Qui ne fonctionne pas)
class Program
{
private static bool customValidation(object s, X509Certificate c, X509Chain ch, SslPolicyErrors e)
{ return true }
static void Main(string[] args)
{
//accept anything
ServicePointManager.ServerCertificateValidationCallback +=
new RemoteCertificateValidationCallback(customValidation);
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.Security.Transport.Realm = "Secured area";
//the generated Web Service Reference class
var client = new ServiceReference1.Service1SoapClient(
binding,
new EndpointAddress("https://smplsite.com/sandbox3/Service1.asmx")
);
client.ClientCredentials.UserName.UserName = "testapp";
client.ClientCredentials.UserName.Password = "testpw";
Console.WriteLine(client.HelloMom("Bob"));
}
}
Edit: BTW, ce n'est pas un site web ou en l'exécutant dans le navigateur, le code d'accès est un C# application en ligne de commande. Aussi, l'authentification est faite par un autre IIS plug-in que je n'ai pas de contrôle.
Edit 2: Pour être clair; la solution, je suis à la recherche d'un purement côté client en question.
Edit 3: le contrôle d'accès se fait via un .haccess
type de système et je l'aime de cette façon.
Je ne veux pas le code de service à n'importe quelle authentification.
- Après avoir lu ton edit, je ne suis pas sûr que ma solution va aider, bcause de l'autre IIS plugin de faire de l'authentification. Je vais l'y laisser, dans le cas où il allume une étincelle...
- J'ai édité ma réponse. Je ne sais pas si ça va aider, mais c'est une autre tentative...
- pouvez-vous obtenir de votre service web à l'aide d'un navigateur, et de regarder ce qui est envoyé à l'aide de fiddler? Ensuite, vous pouvez tenter de reproduire le type d'authentification que le navigateur utilise. Sinon, je suis d'idées.
- Compliqué, je ne suis pas en mesure de faire quelque chose qui est piraté ensemble
- Je ne peux pas obtenir en utilisant ce nom d'utilisateur/pwd. Cependant, en regardant les en-têtes, il semble être juste à la recherche pour l'authentification de base. Je ne peux pas prouver que, bien que.
- Pouvez-vous obtenir via un navigateur web?
- J'ai essayé de la frapper avec IE alors que Fiddler a regarder, il agit comme le mot de passe est mauvais. Retourne un 401.1.
Vous devez vous connecter pour publier un commentaire.
Edit:
Comment l'utilisation de ce:
OP dit que cela ne fonctionnerait pas, et maintenant je vois qu'il ne serait pas dans sa situation.
Nous faire quelque chose comme ceci:
Notez que vous offre IsUserAuthenticated().
Ensuite, le client appelle comme ceci:
svc.AuthenticationHeaderValue
. J'ai eu pour la fin de l'appel deresult = svc.MyWebMethod(authHeader);
.Je vais ajouter une nouvelle réponse, parce que je pense que cela peut aider:
http://intellitect.com/calling-web-services-using-basic-authentication/
Je ne vais pas reproduire ici, parce que je n'ai rien fait, mais une recherche sur google.
Config:
Alors Que La Consommation De
Cela a fonctionné parfaitement pour moi.