J'utilise DotNetOpenAuth (OpenID) et l'authentification par formulaire comme mécanisme d'authentification pour un site que je construis. Cependant, je ne suis pas satisfait des parties de la solution que j'ai trouvées et je devrais vérifier avec vous comment cela se fait habituellement. J'ai défini l'authentification par formulaire loginUrl
à login.aspx
. Voici le code derrière la page de connexion:DotNetOpenAuth et FormsAuthentication
public partial class Login : DataAccessPage {
protected void Page_Load(object sender, EventArgs e) {
if (Request.QueryString["dnoa.receiver"] != "openId") {
openId.ReturnToUrl = Request.Url.ToString();
openId.LogOn();
}
}
protected void openId_LoggedIn(object sender, DotNetOpenAuth.OpenId.RelyingParty.OpenIdEventArgs e) {
var fetch = e.Response.GetExtension();
if (fetch != null) {
string eMail = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
string name = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName);
var usr = db.Users.SingleOrDefault(u => u.EMailAddress == eMail);
if (usr != null) {
// update the name in db if it has been changed on Google
if (usr.Name != name) {
usr.Name = name;
db.SaveChanges();
}
FormsAuthentication.RedirectFromLoginPage(usr.UserId.ToString(), false);
}
}
}
protected void openId_LoggingIn(object sender, DotNetOpenAuth.OpenId.RelyingParty.OpenIdEventArgs e) {
var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
e.Request.AddExtension(fetch);
}
}
donc directement lorsqu'un utilisateur n'est pas connecté, il est envoyé à la login.aspx page qui tente directement de se connecter en utilisant OpenID contre Google. Il vérifie si l'utilisateur est sur la liste des utilisateurs autorisés, puis FormsAuthentication.RedirectFromLoginPage()
.
Jusqu'à présent, aucun problème ... le problème est à la déconnexion. Idéalement, j'aimerais que la connexion soit directement connectée au statut de connexion au compte Google. Si l'utilisateur est connecté à Google, il/elle doit également être connecté sur mon site. Lorsque l'utilisateur se déconnecte de Google, il/elle doit être déconnecté de mon site. Cependant, étant donné que l'authentification par formulaires est utilisée, le ticket durera un certain temps même si l'utilisateur se déconnecte de Google.
Quelqu'un a-t-il des idées pour résoudre ce problème?
Merci d'avance!
Petite note: Google ne renvoie pas le nom complet dans WellKnownAttributes.Name.FullName. Pour obtenir le nom complet, demandez WellKnownAttributes.Name.First et WellKnownAttributes.Name.Last. – joscarsson