ASP.NET中的会话管理和用户帐户与OpenID的链接

时间:2010-03-08 19:49:01

标签: c# asp.net openid dotnetopenauth

我目前正在玩DotNetOpenAuth以使ASP.NET(C#)网站使用OpenID而不是正常的登录密码例程来进行用户和会话处理。

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

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

当我运行页面时,我输入了一个有效的myopenid网址,网站重定向到myopenid页面,我输入了我的密码,一旦成功,它会返回到我的default.aspx,由于以下内容:我的web.config

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

现在用户已“登录”,如何处理我的会话?目前,我不知道如何,例如,检查会话是否仍然存在或如何终止会话。

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


[更新]

我现在使用以下内容检查身份验证:HttpContext.Current.User,然后我可以检查用户是否通过会话进行身份验证。

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

1 个答案:

答案 0 :(得分:3)

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

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

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