2009-12-04 6 views
4

L'exemple de fournisseur DotNetOpenAuth s'exécute localement et il semble gérer correctement les requêtes via le navigateur Web. Je peux parcourir le gestionnaire pour l'autorisation dans le débogueur.Fournisseur OpenID sur localhost avec DotNetOpenAuth

J'ai un projet qui peut s'authentifier avec Google et d'autres fournisseurs, mais échoue avec le fournisseur d'exemple. Le fournisseur de l'échantillon ne voit jamais une demande du tout et la partie qui invoque jette une exception se plaindre No OpenID endpoint found.

dire que je fais ce qui suit dans la partie utilisatrice:

string providerURL = "http://localhost/openid/provider"; 

// Now try the openid relying party... 
var openid = new OpenIdRelyingParty(); 
var response = openid.GetResponse(); 
if (response == null) 
{ 
    Identifier id; 
    if (Identifier.TryParse(providerURL, out id)) 
    { 
     // The following line throws the exception without ever making 
     // a request to the server. 
     var req = openid.CreateRequest(providerURL); 
     // Would redirect here... 
    } 
} 

J'ai remarqué que la UntrustedWebRequestHandler classe empêcher les connexions à hostnames telles comme localhost mais en l'ajoutant en tant qu'hôte sur liste blanche, selon les cas de test ou manuellement, ne semble pas aider.

J'ai vérifié l'hôte est accessible avec les éléments suivants:

// Check to make sure the provider URL is reachable. 
// These requests are handled by the provider. 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(providerURL); 
HttpWebResponse httpRes = (HttpWebResponse)request.GetResponse(); 

pensées? Je suis à bout de savoir pourquoi il ne fait jamais une demande du tout.

EDIT: localhost est la liste blanche comme ceci:

(openid.Channel.WebRequestHandler as UntrustedWebRequestHandler).WhitelistHosts.Add("localhost"); 

J'ai aussi essayé whitelisting en ajoutant à web.config comme ceci:

<dotNetOpenAuth> 
    <messaging> 
     <untrustedWebRequest> 
      <whitelistHosts> 
       <add name="localhost"/> 
      </whitelistHosts> 
     </untrustedWebRequest> 
    </messaging> 
</dotNetOpenAuth> 

l'approche privilégiée, localhost apparaît dans la UntrustedWebRequestHandler Liste des hôtes de la liste blanche examinée dans le débogueur. Leur fournisseur ne reçoit toujours aucune demande.

+0

Et était ce test manuel 'WebRequest.Create' que vous avez appelé depuis votre application Web ou une application de console? –

Répondre

4

Il semble que vous soyez déjà conscient de la nécessité d'ajouter localhost à la liste blanche pour que le système fonctionne. Mais quelque chose d'autre dont j'ai récemment pris conscience, c'est que IIS bloque les applications Web ASP.NET d'exécuter des GET HTTP sur eux-mêmes. Cela fonctionne pour le serveur Web personnel Visual Studio, mais si votre RP et OP sont tous deux hébergés sur IIS sous localhost, il est probable que c'est IIS qui le bloque. Vous pouvez le confirmer ou le refuser en utilisant votre test HttpWebRequest écrit à la main à partir de votre RP hébergé par IIS par rapport à une application de console. Si elles sont sous IIS et que c'est le problème, alors vous devriez utiliser le serveur Web personnel pour votre développement, ou peut-être séparer les deux sites sur IIS dans différents pools d'applications ou quelque chose comme ça vous aidera.

+0

Ils ne sont pas encore sur IIS, mais ils seront déployés si on peut les faire fonctionner. Le problème actuel est simplement de pouvoir tester qu'ils travaillent ensemble. – toholio

+0

Savez-vous si cela est vrai pour IIS Express? – Josh