在ASP.NET中,会话管理和使用OpenID链接用户帐户

我目前正在使用DotNetOpenAuth来使ASP.NET(C#)网站使用OpenID代替用于用户和会话处理的常规登录密码例程.

到目前为止,我已将DotNetOpenAuth.dll添加到我的项目中,并尝试了以下测试登录页面:

<rp:OpenIdLogin ID="OpenIdLogin1" runat="server" />

运行该页面时,我输入一个有效的myopenid网址,然后网站重定向到myopenid页面,在该页面中输入密码,并由于我的web.config中的以下内容,成功后返回到default.aspx:

<authentication mode="Forms">
    <forms defaultUrl="/Default.aspx" loginUrl="~/Login.aspx"/>
</authentication> 

现在用户已“登录”,如何处理我的会话?此刻,我不知道如何例如检查会话是否仍在进行中或如何终止会话.

我的基本问题是,一旦用户通过OpenID进行身份验证,如何管理会话?

[更新]

我现在使用以下方法检查身份验证:HttpContext.Current.User,现在,我可以检查用户是否通过会话进行了身份验证.

现在,有一种可行的方法可以如何使用openid帐户“链接”存储在数据库中的用户详细信息?

解决方法:

从ASP.NET的角度来看,使用OpenIdLogin控件的OpenID登录名(默认情况下)与用户名密码登录名没有什么不同.正如您所发现的,基于ASP.NET FormsAuthentication发送到浏览器的HTTP cookie,对每个传入的HTTP请求都设置HttpContext.Current.User,以使会话在请求之间保持一致.当您在页面或其背后时,Page.User属性是一种更为方便的方法.

但是,如果您要进行访问控制,而不是检查每个页面中是否都有登录用户,则最好使用< authorization> web.config文件中的标记,以强制用户在访问某些页面或页面目录之前登录.

就链接用户详细信息而言,要与用户详细信息关联的密钥是OpenID声明的标识符,这是OpenIdLogin自动分配给FormsAuthentication的用户名值的内容.因此,您可以基于HttpContext.Current.User.Identity.Name的值检索或将用户详细信息存储在数据库中,该值将是每个用户可靠且经过验证的唯一值.

上一篇:从PHP中的OpenID提供程序请求电子邮件地址


下一篇:php-处理Google OpenID