2009-07-14 5 views
4

Je souhaite demander des rapports d'un tiers et dont ils ont besoin « d'accès de base d'authentification » via POST:C# SSL d'accès de base d'authentification

Your client application must use Basic Access Authentication 
to send the user name and password. 

Quelqu'un peut-il me diriger dans la bonne direction?

Editer: J'ai vu this post mais il y a deux réponses et je ne suis pas sûr si c'est ce que je dois faire ou lequel est la méthode préférée.

Répondre

6

En supposant que vous utilisez un WebRequest, vous joignez un CredentialCache à votre demande:

+2

C'est ce que vous voulez, la réponse acceptée à ce poste fait des choses à la dure, mais qui peuvent être nécessaires pour ce qu'il fait. Gardez à l'esprit que si vous utilisez un proxy, vous devrez envoyer des informations d'identification distinctes via request.Proxy.Credentials. De plus, si vous utilisez un proxy, vous pouvez ou ne pouvez pas utiliser PreAuthenticate. De plus, vous n'avez pas forcément besoin de faire CredentialCache, vous pouvez simplement définir request.Credentials = nc; Je ne sais pas vraiment quelle est la différence. –

+0

@Allen avec Basic il n'y a pas de différence entre nc et cc. Avec Digest, le cache fait la bonne chose: il ne négocie qu'une seule fois le résumé, puis il pré-authentifie avec un nouveau 'nc' croissant (le digest nc, pas le cred du réseau dans mon exemple), évitant ainsi le round round supplémentaire. Par conséquent, je crois qu'il est préférable d'avoir l'habitude d'utiliser le cache plutôt que les réseaux. –

2

L'essentiel de base est comme ceci:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
request.Method = WebRequestMethods.Http.Get; 
request.Credentials = new NetworkCredential(username, password); 

mais parfois il y a des problèmes avec l'utilisation des informations d'identification de demande, les alternative est d'ajouter les données d'authentification dans les en-têtes de demande

string authInfo = username + ":" + password; 
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)); 
request.Headers["Authorization"] = "Basic " + authInfo; 

f ou plus de détails, voir ce billet de blog

http://charlie.cu.cc/2012/05/how-use-basic-http-authentication-c-web-request/