2010-08-24 3 views
5

Chaque fournisseur OpenId a une URL de fournisseur (Google par exemple: https://www.google.com/accounts/o8/id)DotNetOpenAuth: Comment implémenter un simple fournisseur OpenId?

En utilisant OpenIdRelyingParty.CreateRequest je réussi à rediriger l'utilisateur vers le fournisseur Google Url et recevoir le rappel du fournisseur. Tout a bien fonctionné.

Maintenant, j'essaie d'implémenter mon propre fournisseur OpenId simple (je veux agir comme Google sur mon exemple). DotNetOpenAuth a une démo de fournisseur appelée OpenIdProviderWebForms. Au cours des 4 ou 5 dernières heures, j'ai été tryng pour me connecter à l'aide de la même démo que j'ai réussi à connecter sur Google. Premièrement: je ne sais pas quelle URL dois-je appeler. J'ai essayé toutes les Urls (server.aspx, provider.ashx ...) et toutes déclenchent une exception "No OpenID endpoint found". Toutes les configurations semblent être très bien.

Comment implémenter un simple fournisseur OpenId? Quelle URL dois-je appeler dans le OpenRelyingParty.CreateRequest?

Répondre

16

D'abord nous allons établir quelques termes:

Le User-supplied identifier est la chaîne que l'utilisateur en fait des types (ou est déclenché en cliquant sur un bouton prédéfini à la RP) qui déclenche la découverte OpenID ait lieu. Il n'est pas normalisé et ne devrait jamais être utilisé pour représenter l'utilisateur dans votre base de données parce qu'il n'est pas sécurisé ou unique, mais c'est un point de départ nécessaire. La découverte sur cet identifiant correspond soit à claimed identifier soit à OP Identifier. Exemples: yahoo.com, myopenid.com, andrewarnott.myopenid.com

Le Claimed Identifier est l'identificateur OpenID que l'utilisateur "contrôle" ou utilise comme son identité. Il peut ou peut pas être une URL (il peut être un XRI). Une assertion positive d'un OP sera toujours un identificateur revendiqué (même si la découverte a commencé avec un identificateur OP). Exemples: https://andrewarnott.myopenid.com/

Le OP Identifier, ou « fournisseur OpenID Identifier » est le identifer que OpenID peut effectuer la découverte RPs sur pour commencer un flux identifier select où le RP ne sait pas encore ce que l'identificateur Réclamé de l'utilisateur sera. Exemples: https://me.yahoo.com/, http://www.myopenid.com/ et https://www.google.com/accounts/o8/id

Le OP Endpoint est l'URL que le RP redirige l'utilisateur vers afin d'authentifier l'utilisateur, et est utilisé pour créer des associations partagées ou d'effectuer la vérification directe d'une assertion qui utilise un OP privé association. Exemples: http://localhost/server.aspx, http://localhost/provider.ashx, https://www.google.com/accounts/o8/ud (notez l'oud se terminant au lieu de id)

Donc, avec tout ce contexte, votre OpenIdRelyingParty.CreateRequest appel doit recevoir un identifiant fourni par l'utilisateur, qui peut aussi être un identifiant validé ou un identificateur OP. Il doit pas être le point d'extrémité OP. Ainsi, par exemple, vous pourriez passer:

openIdRelyingParty.CreateRequest("http://localhost/sampleop/") 

ou

openIdRelyingParty.CreateRequest("http://localhost/user.aspx?username=bob") 
+2

Andrew, merci beaucoup pour toutes ces explications +1. Cela m'a vraiment aidé à clarifier ces concepts. J'ai réussi à faire en sorte que les 2 démos DotNetOpenAuth se connectent entre elles (OP et RP) mais je n'ai pas pu créer mon propre OP et me connecter à lui.Continuez à recevoir les "No OpenId endpoints found", ce qui n'est pas une erreur très explicative. Votre projet (DotNetOpenAuth) semble être génial mais il manque de documentation. En fait je pense que openid lui-même manque de documentation. Je ne pouvais pas trouver ces concepts pointés ailleurs. Merci quand même :) –

+0

@ André Pena, ça fait des jours que j'essaye de faire fonctionner mon OP. mais c'est le même problème que vous avez. Avez-vous déjà résolu cela? –

2

Pour les exemples DotNetOpenAuth MVC, l'Open URL Id identificateur à utiliser est http://localhost:4864/User/Identity (où OpenIdProviderMvc est configuré pour fonctionner sur le port 4864 sur localhost)