-1

我们有一个用 MVC 编写的 Web 前端,它使用 SSO 和 Windows 身份验证,并且该前端连接到配置为使用特定 AD 服务帐户运行的后端 WCF 服务层。

我们喜欢这种方法,因为与数据库服务器的连接是受信任的,并且我们在 web.config 中没有密码,并且允许 WCF 服务层连接到 SQL Server,因为服务帐户在 DB Server 上具有适当的权限,单终端用户没有't,他们不应该。

我现在正在寻找的是一种使 WCF 服务能够区分哪个用户身份从客户端连接并在应用程序级别验证安全规则(我们使用 Visual Guard 安全框架)的方法,但同时我们仍然有我们使用EF连接SQL时需要使用当前的服务账号。

到目前为止我所做的是以下,

当我在 Web 前端创建 WCF 客户端时:

using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
  var client = new RPPServiceInterface().GetRWSService();
  ...
}

从我在Impersonate上面介绍这个调用的那一刻起,在下面的代码中,我可以检索客户端用户而不是服务帐户了:

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
public List<RWSProgram> GetCedentsPrograms(int cedentID, int uwYear)
{
  var currentSec = ServiceSecurityContext.Current;
  ...
}

我想做的是我们双方都使用客户端身份来验证安全性,然后以某种方式释放该身份或有另一种方式来模拟服务层中的服务帐户以打开我的 SQL 连接......任何想法?我做错了什么或误解了整个画面吗?

PS我已经检查过这个但没有帮助.... WCF服务双重模拟?

谢谢,戴维德。

4

1 回答 1

1

这是你想要的?:

// ...Service operation code impersonating a client here

using (WindowsImpersonationContext processContext = WindowsIdentity.Impersonate(IntPtr.Zero))
{
    // Database access stuff here
    // Within the using block the client is no longer impersonated:
    // context reverts to the identity running the service host process
    // (I'm assuming this is what you call your service account)
}

// Ensuing code impersonates the client as previously...
于 2012-07-22T08:31:38.553 回答