代码之家  ›  专栏  ›  技术社区  ›  Brad Heller

已验证的WCF:获取当前安全上下文

  •  7
  • Brad Heller  · 技术社区  · 16 年前

    我有以下场景:

    • 我的数据库中存储了各种用户数据。
    • 我们希望通过web服务将这些数据公开给用户,以便他们可以将数据与应用程序集成。
    • 我们还想在这些服务上公开一些业务逻辑。像这样的 我们不想使用OData。
    • 这是一个多租户应用程序,所以我只想公开 他们的

    function GetUsersData(id) 
     var user := Lookup User based on Username from Auth Context
     var data := Get Data From Repository based on "user"
     return data
    end function
    

    对于业务逻辑场景,我认为应该是这样的:

    function PerformBusinessLogic(someData)
     var user := Lookup User based on Username from Auth Context
     var returnValue := Perform some logic based on supplied data
     return returnValue
    end function
    

    这里的难点是获取用户通过身份验证的当前用户名(或cert场景中的cert信息)!

    WCF是否支持这种情况?如果不是,WSE3会启用这个吗?

    谢谢,

    1 回复  |  直到 16 年前
        1
  •  17
  •   marc_s MisterSmith    16 年前

    应该不会太难,我想:

    • 如果您的用户在您的WCF服务中使用Windows用户凭据进行了身份验证,您将能够在下面找到他们的凭据

      ServiceSecurityContext.Current.WindowsIdentity
      
    • 如果您的用户使用证书进行了身份验证,您将在下面找到他们的身份(将是CertificateIdentity而不是WindowsIdentity)

      ServiceSecurityContext.Current.PrimaryIdentity
      

    给定一个Windows标识,您还可以模拟该调用方,以便后续调用进入您的业务层或数据层,如果需要,请查看MSDN文档 Delegation and Impersonation with WCF ,或谷歌或必应的“WCF模拟”应该给你一卡车有价值的链接在这个主题。

    许多