29 votes

Utilisation d'OpenID (via DotNetOpenAuth) avec les rôles d'utilisateur et d'autres fonctionnalités du fournisseur d'appartenance

Je suis en train de construire un ASP.NET MVC site où je veux utiliser DotNetOpenAuth à mettre en œuvre OpenID login (je suis complètement à l'abandon de nom d'utilisateur/mot de passe de connexion).

Jusqu'à présent, j'ai écrit mon code par défaut nom d'utilisateur/mot de passe système avec l'ASP.NET Fournisseur d'appartenances, en utilisant les rôles de système, le système de profil, et l'enregistrement de base du système. Maintenant, dans ma migration à OpenID, je suis prévoyant certaines questions, en particulier avec l'interfaçage avec l'adhésion contrôles prévus par la ASP.NET Fournisseur d'appartenances.

En regardant les DotNetOpenAuth MVC exemple, je vois que les seules références à la FormsAuthentication système sont de créer un AuthCookie et, plus tard, à l'appel FormsAuthentication.SignOut(). Donc, je ne suis pas sûr de savoir si je peux utiliser ASP.NET Fournisseur d'appartenances fonctions avec cette OpenID système, même si une autre partie de l'exemple de code appelle User.Identity.IsAuthenticated.


Sera-ce OpenID système d'interface avec le ASP.NET Fournisseur d'appartenances? Si non, je peux en quelque sorte corriger cela?

Si ce qui précède est tout à fait impossible, je pense que mon prochain cours de l'action serait de simplement rouler mes propres tables de base de données et à écrire manuellement le code à utiliser à partir de mon Compte contrôleur. J'ai remarqué que la Pile d'Échange de Données de l'Explorateur prend cette approche, mais serait-ce la bonne?


EDIT: Juste pour être sûr que je suis en utilisant la terminologie appropriée, par "ASP.NET Fournisseur d'appartenances", je veux dire le fournisseur qui utilise les tableaux générés par l' aspnet_regsql.exe outil.

40voto

jwsample Points 2115

Ils s'interface très bien, mais vous aurez besoin de faire un peu de travail personnalisé.

Ce que j'ai fait dans le passé est ce:

D'abord, je suis en supposant que vous avez un semi de travail openid mise en œuvre, ce qui signifie que vous pouvez recevoir de l'identité réelle d'un openid fournisseur, mais juste ne sais pas quoi faire avec elle.

- Je continuer à utiliser FormsAuthentication comme un back-end, même sans l'utiliser pour l'Authentification.

Vous aurez besoin d'une table de base de données qui permet de relier un FormsAuthentication utilisateur à un ou plusieurs openids. Vous pouvez simplement stocker le FormsAuthentication nom d'utilisateur (qui n'existe pas encore) avec l'identité de l'URL que vous recevez de l'openid fournisseur. Nous allons appeler cette table AUTH

Quand quelqu'un s'authentifie sur votre site avec un openid vérifier qu'il n'existe dans l'AUTH table. Si non, vous devez faire deux choses. Appel D'Adhésion.CreateUser() en passant quel que soit généré nom d'utilisateur que vous voulez (ou l'adresse e-mail fournie par openid). J'ai de l'utilisateur un GUID pour le mot de passe car il ne sera pas utilisé. Dans le même temps, mettre une entrée dans la AUTH table de mappage de l'Adhésion nom d'utilisateur à l'openid déclaration d'identité.

Quand quelqu'un s'authentifie sur votre site avec un id et il existe déjà appel FormsAuthentication.RedirectFromLoginPage avec le nom d'utilisateur associé à l'openid et tous les tickets d'authentification sera fixé.

Maintenant, vous pouvez utiliser toutes les belles de sécurité intégré dans des objets comme vous l'avez toujours pu avant de mettre en œuvre openid.

EDIT: Comme un avantage supplémentaire de cette configuration, vous avez la possibilité, dans l'avenir, en permettant à l'utilisateur/mot de passe de connexions.

Vous pouvez également échanger votre fournisseur d'appartenances à tout moment.

Aussi, nombreux à celui de la nature de l'AUTH tableau vous permet d'associer plusieurs openids.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X