Utilisation d’OpenID (via DotNetOpenAuth) avec des rôles d’utilisateur et d’autres fonctionnalités de fournisseur d’adhésion

Je construis un site ASP.NET MVC sur lequel je veux utiliser DotNetOpenAuth pour implémenter la connexion OpenID (je supprime complètement la connexion basée sur un nom d’utilisateur / mot de passe).

Jusqu’à présent, j’ai écrit mon code pour le système de nom d’utilisateur / mot de passe par défaut avec le fournisseur d’adhésion ASP.NET, en utilisant le système de rôles, le système de profils et le système d’enregistrement de base. Maintenant, lors de ma migration vers OpenID, je prévois quelques problèmes, en particulier l’ interface avec les contrôles d’appartenance fournis par le fournisseur d’adhésion ASP.NET .

En examinant l’exemple MVC DotNetOpenAuth, je constate que les seules références au système FormsAuthentication consistent à créer un AuthCookie et plus tard à appeler FormsAuthentication.SignOut() . Par conséquent, je ne suis pas sûr de pouvoir utiliser les fonctions du fournisseur d’appartenance ASP.NET avec ce système OpenID, bien qu’une autre partie de l’exemple de code appelle User.Identity.IsAuthenticated .


Est-ce que ce système OpenID s’interface avec le fournisseur d’adhésion ASP.NET? Si non, puis-je résoudre ce problème?

Si ce qui précède est totalement impossible, je pense que ma prochaine action consiste simplement à faire rouler mes propres tables de firebase database et à écrire manuellement le code pour pouvoir les utiliser à partir de mon contrôleur de compte. J’ai remarqué que Stack Exchange Data Explorer adopte cette approche, mais s’agirait-il d’un bon plan d’action?


EDIT: Pour m’assurer que j’utilise la terminologie correcte, par «fournisseur d’adhésion ASP.NET», j’entends le fournisseur qui utilise les tables générées par l’outil aspnet_regsql.exe .

    L’interface sera parfaite, mais vous devrez faire un peu de travail personnalisé.

    Voici ce que j’ai fait dans le passé:

    Premièrement, je suppose que vous avez une implémentation openid semi-active, ce qui signifie que vous pouvez recevoir l’identité réelle d’un fournisseur openid mais ne savez pas vraiment quoi en faire.

    Je continue à utiliser FormsAuthentication comme back-end, même sans l’utiliser pour l’authentification.

    Vous aurez besoin d’une table de firebase database vous permettant d’associer un utilisateur de FormsAuthentication à un ou plusieurs openids. Vous pouvez simplement stocker le nom d’utilisateur FormsAuthentication (qui n’existe pas encore) avec l’URL d’identité que vous avez reçue du fournisseur openid. Nous appellerons cette table AUTH

    Quand quelqu’un s’authentifie sur votre site avec un openid, vérifiez s’il existe dans la table AUTH. Sinon, vous devez faire deux choses. Appelez Membership.CreateUser () en transmettant le nom d’utilisateur que vous voulez générer (ou l’adresse e-mail si elle est fournie par openid). J’utilise un GUID pour le mot de passe car il ne sera pas utilisé. Dans le même temps, placez une entrée dans la table AUTH mappant le nom d’utilisateur Membership sur l’identité revendiquée par openid.

    Lorsque quelqu’un s’authentifie sur votre site avec un identifiant ouvert et qu’il existe déjà, appelez FormsAuthentication.RedirectFromLoginPage avec le nom d’utilisateur associé à openid et tous les tickets d’authentification appropriés seront définis.

    Maintenant, vous pouvez utiliser tous les beaux objects de sécurité intégrés comme vous le pouviez toujours avant de mettre en œuvre openid.

    EDIT: En tant que bénéfice supplémentaire de cette configuration, vous avez la possibilité à l’avenir d’autoriser les connexions par nom d’utilisateur / mot de passe.

    Vous pouvez également échanger votre fournisseur d’adhésion à tout moment.

    De plus, la nature multiple de la table AUTH vous permet d’associer facilement plusieurs openids.