ASP.net会员提供商 - 在表单和集成身份验证之间切换

时间:2008-09-15 17:42:18

标签: asp.net authentication

我正在编写一个Web应用程序,我希望能够使用指向SQL数据库的表单身份验证,或者在Web应用程序的不同安装中使用集成身份验证。我正在使用任一提供商对用户进行身份验证,但我对如何构建数据库有疑问。

目前我正在做的是使用代码:

public static string UserID
{
  get
  {
     if (HttpContext.Current.User.Identity.AuthenticationType == "Forms")
     {
       //using database auth
       return Membership.GetUser().ProviderUserKey.ToString();
     }
     else
     {
       //using integrated auth
       return HttpContext.Current.Request.LogonUserIdentity.User.ToString();
     }
   }
 }

然后我使用返回的密钥(取决于提供者,它是来自aspnetdb数据库的UserID,或Windows SID)作为他们创建的项目的UserID等.UserID字段与Users表中的Users表没有关系。数据库虽然像你传统的那样。

还有更好的方法吗?我曾想过创建一个user表,其中包含两个UserID(内部)和ExternalID(存储Windows SID或来自aspnetdb的ID)的用户表,然后在整个应用程序中使用内部UserID,但是它的成员资格并不那么干净c#中的课程。

似乎有很多应用程序允许您在集成的auth和FBA(首先考虑Sharepoint 2007)之间切换,但我在网上找不到关于如何构建解决方案的任何好的教程。任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

为什么不使用两个不同的成员资格提供程序(Windows和Forms,而不是专门使用LogonUserIdentify)?在您发布的代码示例中,您可以在任何提供程序的Membership命名空间中使用相同的方法。您可以更改Web.config文件中的默认提供程序。我同意使用特定于“集成身份验证”的代码并不干净。这是一个例子:

<membership defaultProvider="1">
 <providers>
  <clear/>
  <add name="1" ... />
  <add name="2" ... />
 </providers>
</membership>

然后,更改defaultProvider。处理Membership的ASP.NET控件(例如Login控件)有一个属性,允许您选择一个Membership provider,这意味着您可以以编程方式选择一个。

用户ID仅与提供商的上下文相关,因此使用“内部”用户名似乎不必要 - 使用提供商名称和外部用户ID(因为多个提供商中可能存在相同的用户ID) )在您自己的数据存储中。

通常不需要创建自己的用户ID,因为ASP.NET提供程序将在后台处理这些用户ID。例如,如果您使用ASP.NET配置文件提供程序,则将具有每用户配置文件信息,而不依赖于使用哪个成员资格提供程序对用户进行身份验证。