【问题标题】:Bring the users identity from the presentation tier to the application tier将用户身份从表示层带到应用层
【发布时间】:2014-12-03 03:28:36
【问题描述】:

对于我们的 n 层应用程序,我们正在寻找一种方法来使用从表示层到应用程序层的标识。我们的应用程序是经典的 3 层应用程序,具有以下层:

  • UI - 表示层
  • 应用程序/WCF 层
  • 数据库层

应用层不暴露在互联网上,表现层可以通过本地网络连接。我们的问题是用户登录到表示层,我们希望表示层将用户身份传递给应用层。如何才能做到这一点?是否可以使用基于声明的身份验证来做到这一点?我们目前正在寻求在 STS 服务中实现IWSTrust13SyncContract,但似乎用户浏览器必须可以访问应用层。有人可以给我一些关于如何解决这个问题的建议。

【问题讨论】:

    标签: asp.net wcf identity wif n-tier-architecture


    【解决方案1】:

    创建一个类似于用户身份的类并在您的表示层中设置值。
    并将这个类的引用传递给你的应用层。

    【讨论】:

    • 如果我只是在调用中将 ClaimsIdentity 类传递给应用层,那么任何有权访问应用层网络的人都可以这样做。没有证据表明表示层创建了通过应用程序层调用传递的 ClaimsIdentity。
    【解决方案2】:

    您可以使用模拟/委托或可信子系统模型 - 请参阅 http://msdn.microsoft.com/en-us/library/aa905320.aspx

    模拟/委托最适合 Windows 身份验证,但即便如此,您的表示层服务器也可能需要受信任才能进行委托。在此模型中,应用层对最终用户进行身份验证和授权。

    使用更常见的可信子系统模型:

    • 表示层对最终用户进行身份验证
    • 应用程序层通常需要对表示层进行身份验证,例如使用 Windows 身份验证并仅接受来自运行表示层的服务帐户的请求,或其他一些身份验证方法,例如使用客户端证书,只接受来自特定 IP 地址的请求,...
    • 应用层信任表示层来授权最终用户

    有多种方式来处理授权:

    • 表示层通过外观调用应用层。此 Facade 代表 Applicaiton Tier 执行所有必需的授权。

    • 表示层将最终用户的身份传递给应用层。这可以是带内的(使用附加参数污染您的操作合同),也可以是带外的,例如在自定义 SOAP 标头中。如果您使用 SOAP 标头,则可以通过使用行为客户端注入标头和服务器端处理标头,使用 WCF 使此对您的应用程序代码透明。

      无论是带内还是带外,您都信任表示层来验证它传递给应用层的身份。因此,对表示层进行身份验证非常重要,并根据您的环境来防止中间人攻击,例如通过使用 HTTPS。

    【讨论】:

    • 这个解决方案在我的短名单上,尽管我们更喜欢基于声明的身份验证的解决方案。我们的表示层信任我们的 STS,我们的偏好是重用令牌与应用层通信。我们只是不知道怎么做。
    【解决方案3】:

    您的表示层将使用某种形式的基于声明的身份验证(被动/主动)。一旦颁发了令牌,您应该使用通道上的 ActAs 或 OnBehalf 将身份联合到中间(应用程序)层堆栈中的 n 级服务。如果您需要样品,请告诉我。

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 2014-03-24
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      相关资源
      最近更新 更多