【问题标题】:WCF, active directory authentication|authorization and user profiles in sql combinationWCF、活动目录身份验证|授权和sql组合中的用户配置文件
【发布时间】:2011-11-26 20:06:57
【问题描述】:

我正在开发一个 WCF 服务,它将承载应用程序的业务逻辑。该应用程序主要用于 Intranet,但可以从 Internet 访问。我们有一个活动目录域启动并运行,所以我计划根据用户的用户名和他们所在的组对用户进行身份验证和授权。该服务主要用于 ASP.NET MVC 站点

那么,第一个问题是如何根据用户的 AD 配置文件对用户进行身份验证和授权?

其次,我需要存储有关每个用户的附加信息。问题是我无法修改 AD 方案。添加的字段数约为10个左右。

我能否以某种方式使用 SQL Server 来存储配置文件?我当然可以,但是如何将其与 AD auth 联系起来?

【问题讨论】:

    标签: c# .net asp.net-mvc wcf active-directory


    【解决方案1】:

    您可以为此使用 WIF。

    您将以正常方式为 WIF 配置 WCF 服务,然后使用从基 ClaimsAuthenticationManager 派生的自定义 ClaimsAuthenticationManager 类并覆盖其 Authenticate 方法。这是 WIF 的正常扩展点。 WIF 将 从传入请求中获取安全令牌并为每个相关的 AD 属性添加声明。在您覆盖 Authenticate 方法时,您将添加新的声明来表示您的额外属性。

    WCF 服务的 WIF 基本用法如下所述:

    http://msdn.microsoft.com/en-us/library/ee748476.aspx

    要了解如何使用 ClaimsAuthenticationManager,请从这里开始:

    http://msdn.microsoft.com/en-us/library/ee748211.aspx

    【讨论】:

      【解决方案2】:

      好吧,我认为您在这里有几个选择,但您必须仔细考虑实施。

      使用 Active Directory 身份验证的主要问题是,默认情况下,用户的凭据只能在两台计算机之间成功传递。对于 Web 应用程序,这意味着用户的凭据可以在最终用户的计算机和 Web 服务器之间传输,但不能更远。

      然而,这种行为可以通过使用 Kerberos 身份验证来改变,它本质上允许身份验证票证在链中的所有受信任机器之间传递(即从 Web 服务器到应用程序服务器再到数据库,例如例子)。成功配置 Kerberos 可能极具挑战性,尤其是如果您之前没有这方面的经验。

      我认为您最好的选择是将您的网站配置为仅接受 Windows 身份验证。这意味着 IIS 将针对活动目录执行用户验证。在您的 ASP.Net 应用程序中,您可以从 Request.ServerVariables("logon_user") 中获取授权用户的域名。

      此时,例如,您可以使用 FormsAuthentication 登录用户,而无需他们再次登录。

      然后,您可以实现 SQL Server Membership Provider 或创建您自己的数据库接口,以进行进一步的用户验证和额外的信息存储。我们使用了这两种机制,但我更喜欢自建的机制,因为它提供了额外的控制,在这种情况下,您不需要会员提供者提供的很多功能(密码重置、恢复等) .

      【讨论】:

        猜你喜欢
        • 2013-10-02
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多