如何使我的应用程序集成可登录?

时间:2009-06-26 11:11:31

标签: c# security

我一直在做以下登录模块:

  1. 使用用户名和密码
  2. 创建一个表
  3. 通过检查用户表登录。
  4. 那么如何像Sql Server这样的应用程序一样使用集成登录?我并不是指通过传递连接字符串,我的意思是它会检查我的应用程序的凭据而不输入任何用户名和密码。

    由于

    编辑:

    我不是说SQL Server集成登录,我的意思是我的应用程序的集成登录,是否可能?

    例如,我的应用程序将读取AD的名称并与当前用户名进行比较,然后我不需要用户输入我的应用程序的密码。

    我不知道我该怎么做以及从哪里开始,因为如果我搜索综合登录,Google的99.9%的结果会给我连接字符串,我不是那个。

2 个答案:

答案 0 :(得分:0)

[此答案假定您位于Active Directory域中]

您使用的是Active Directory Windows身份验证吗?如果是这种情况,您可以在连接字符串中使用集成安全性选项。

以下是使用集成安全性的示例连接字符串:

"Data Source=MyServer;Initial Catalog=db name;Integrated Security=True"

这会降低复杂性,让您忘记要求用户输入用户名和密码,因为它会获取他们已登录到工作站的Windows凭据。

编辑:

如果应用程序是一个网站,那么您需要在活动目录中将SQL服务器设置为“委托信任”(请参阅​​http://msdn.microsoft.com/en-us/library/aa905162(SQL.80).aspx)。这将允许Web服务器将用户的Windows登录凭据委派给SQL服务器。如果不这样做,则SQL连接将是匿名的。

答案 1 :(得分:0)

假设您的应用程序将在本地网络上运行Active Directory,我认为有几个选项,具体取决于您希望如何实现授权。

如果您希望/需要使用某些自定义规则/逻辑进行授权,那么您首先需要确定谁运行该应用程序:

  • Environment.UserNameEnvironment.UserDomainName一起为您提供足够的信息;
  • 或者(并且更安全)您使用以下代码段:

    AppDomain.CurrentDomain.SetPrincipalPolicy(
        System.Security.Principal.PrincipalPolicy.WindowsPrincipal);
    var identity = Thread.CurrentPrincipal.Identity;
    

identity,你可以提取Security Identifier,它是全球唯一的。 (但不像域\用户名那样漂亮。)

获取当前用户名后,您可以应用您想要的任何授权规则。