将用户身份从表示层带到应用程序层

时间:2014-10-08 12:55:08

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

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

  • 用户界面 - 表示层
  • 应用程序/ WCF层
  • 数据库层

应用程序层未公开到Internet,表示层可以通过本地网络连接。我们的问题是用户登录到表示层,我们希望表示层通过用户身份传递给应用程序层。如何才能做到这一点?是否可以通过基于声明的身份验证执行此操作?我们目前正在寻求在STS服务中实现IWSTrust13SyncContract,但似乎用户浏览器必须可以访问应用程序层。有人可以给我一些关于如何处理这个问题的建议。

3 个答案:

答案 0 :(得分:2)

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

模拟/委派最适合使用Windows身份验证,但即使这样,也可能要求您的Presentation Tier服务器受信任以进行委派。在此模型中,应用程序层对最终用户进行身份验证和授权。

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

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

有许多方法可以处理授权:

  • Presentation Tier通过Facade调用应用程序层。此Facade代表Applicaiton Tier完成所有必需的授权。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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