Asp.net 将用户标识从表示层带到应用层

Asp.net 将用户标识从表示层带到应用层,asp.net,wcf,identity,wif,n-tier-architecture,Asp.net,Wcf,Identity,Wif,N Tier Architecture,对于我们的n层应用程序,我们正在寻找一种从表示层到应用层使用标识的方法。我们的应用程序是一个经典的三层应用程序,具有以下层: UI-表示层 应用程序/WCF层 数据库层 应用层不暴露于internet,表示层可以通过本地网络连接。我们的问题是,用户登录到表示层,我们希望表示层将用户身份传递给应用层。如何做到这一点?使用基于声明的身份验证是否可以做到这一点?我们目前正在寻找在STS服务中实现IWSTrust13SyncContract,但似乎用户浏览器必须能够访问应用层。有人能给我一些建议如何

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

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

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

创建一个类似于用户标识的类,并在表示层中设置值。

并将此CALS的引用传递给您的应用层。

您可以使用模拟/委派或受信任的子系统模型-请参阅

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

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

  • 表示层对最终用户进行身份验证
  • 应用层通常希望对表示层进行身份验证,例如使用Windows身份验证并仅接受来自运行表示层的服务帐户的请求,或者使用其他身份验证方法,例如使用客户端证书,仅接受来自特定IP地址的请求
  • 应用层信任表示层授权最终用户
处理授权的方法有很多:

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

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

    无论是带内还是带外,您都信任表示层对传递给应用层的标识进行身份验证。因此,对表示层进行身份验证非常重要,这取决于您的环境,以防止中间人攻击,例如使用HTTPS


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

此解决方案在我的短名单中,尽管我们更喜欢基于声明的身份验证解决方案。我们的表示层信任我们的STS,我们的首选是重用令牌与应用层通信。我们只是不知道该怎么做。如果我只是将调用中的ClaimSideEntity类传递给应用层,那么任何可以访问应用层网络的人都可以这样做。没有证据表明表示层创建了随应用层调用传递的ClaimsIdentity。