【问题标题】:ASP.NET Forms Auth For Downstream WCF Authentication and Authorization用于下游 WCF 身份验证和授权的 ASP.NET 表单身份验证
【发布时间】:2013-05-14 20:14:58
【问题描述】:

开发环境:Windows 7 Enterprise with .NET 4.0 与 Visual Studio 2010

生产环境:带有 IIS 7.0 的 Windows 2008 Server

我正在尝试找出对 WCF 服务进行身份验证和授权的最佳方式,该服务运行在与 ASP .NET Web 应用程序不同的安全区域中的独立计算机上。

用户根据我们存储在数据库中的凭据使用用户名和密码登录。我们没有实现 Membership Provider,但是当用户的凭据通过 mustard 时,我们手动创建一个带有用户 ID 的 Forms Auth 票证。

我确实推出了自己的实现 RoleProvider 的 Role Provider。因此,我们拥有“标准”ASP .NET 角色以及在我们的 ASP .NET Web 应用程序上工作的表单身份验证票。

我需要做的是以某种方式将这些凭据传递给位于另一台计算机上的 WCF 服务。最初,我认为我可能会使用 Windows Identity Foundation 并创建自定义安全令牌服务 (STS)。基本上,如果用户进行身份验证,则创建一个令牌并将基于声明的授权与用户身份一起添加到令牌中,并将其传递给 WCF 服务。

我们目前使用的是 .NET Remoting 服务(.NET 1.1 时间范围),根本不进行身份验证或授权。

这似乎有点矫枉过正,因为可能有一种方法可以简单地传递我目前与用户拥有的信息,因为当您创建 Forms Auth 票证时,我知道当前的 IPrinciple 设置为 IIdentity在 Thread.CurrentIdentity 上使用设置为用户 ID 的“名称”属性进行设置。

我很确定 IsInRole("WhateverRole") 在这一点上也能正常工作,但所有这些都在 Web 应用程序端。没有任何东西被传递给 .NET Remoting 服务。

看这两个类:
AuthenticationService Class
ServiceAuthorization Class
我不认为他们是我想要的。同样,我已经阅读了 Michele Bustamante 的 Learning WCF,但我并没有真正看到这种特殊情况。当我阅读有关 Windows 身份验证 的内容时,我一直认为需要将其绑定到与内部 Windows 安全情况相关的一些内部 NTLM 或 Kerberos。我们的用户都不是内部用户。它们是严格外部的。

现在,我知道如果用户获得了 Forms Auth 票证,他们基本上会获得有效的 IPrinciple,并且应该设置角色,对吗?

如果是这样,有没有办法将它传递给另一台机器上的 WCF 服务设置?如果我将 WCF clientCredentialType 设置为 windows 并将 serviceAuthorization principalPermissionMode 设置为“UseAspNetRoles”,当我进行服务调用时,这些是否会在安全上下文中从 Web 应用程序传递到 WCF 服务?

我找不到任何关于这会如何发生的明确信息。谢谢。

【问题讨论】:

  • 您是否需要 WCF 服务对用户凭据进行身份验证?还是只是 Web 服务器凭据?两台服务器是否在同一个 Web 域(不是 Windows 域)中?
  • 理想情况下,我希望 WCF 针对用户的凭据进行身份验证。它们不在同一个域中。

标签: asp.net wcf forms-authentication wcf-security


【解决方案1】:

我想你想要的是这样的:

http://thoughtorientedarchitecture.blogspot.com/2009/10/flowing-aspnet-forms-authentication.html

这不是超级安全,因为您实际上是在创建自己的中间人攻击,但它可能足够安全,可以满足大多数需求。

基本上可以归结为:

  1. 使用相同的 MachineKey 配置两台服务器
  2. 从用户请求中获取 FormsAuthentication cookie
  3. 将 cookie 附加到传出 WCF 服务调用
  4. ???
  5. 利润

【讨论】:

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