【问题标题】:Role-based authentification for the WCF REST serviceWCF REST 服务的基于角色的身份验证
【发布时间】:2014-05-16 03:27:56
【问题描述】:

我正在尝试对 REST WCF 服务实施基于角色的身份验证。我阅读了很多关于这个主题的信息,但没有清楚地了解我必须做什么。 我了解如何使用 [PrincipalPermission] 属性限制对服务的访问,但不知道如何检查用户是否属于某个角色。 因此,如果有人能指引我走向正确的道路,我将不胜感激(例如,制定路线图我应该怎么做才能实现这一目标)。

让我描述一下这种情况。我有一个托管在服务器 A 上的远程服务和托管在服务器 B 上的 ASP.Net MVC 客户端。 所有这些休息服务都可以访问数据库,我可以在其中读取用户是否可以访问服务的信息。

【问题讨论】:

  • 我们可能需要更多关于您项目性质的信息。例如,如果它是您正在创建的 Web 服务器并且您打算将其公开,那么(据我所知)无法以某种方式捕获一些匿名用户的“角色”。因此,您将坚持检查数据库的值以确定角色。但是,如果您对网络用户使用 TCPIP 绑定,则可以通过调用 LDAP 服务器来获取角色。但我们需要更多信息...
  • 我的所有服务都应该位于 Internet 上。这些服务中的每一项都在处理机密信息。所以我必须按照用户角色来限制对这些服务的访问。存储在数据库中的有关用户、角色和服务的所有信息。
  • 作为创建服务的平台,我使用 WCF。因为它是 REST 服务,所以我使用 webHttpBinding。客户端和服务之间的交互是通过以下方式进行的。我有一个 ASP.Net MVC 项目(充当客户端)。用户在站点上授权并尝试调用远程服务。当他尝试调用服务时,服务应该检查用户是否可以访问这个 REST 服务?

标签: c# asp.net wcf rest


【解决方案1】:

好的,龙舌兰酒,IMO,根据您的描述,您真正想要的是一个普通的 REST WCF 服务,它带有一个 Login(ID as string, PWD as string) 方法,该方法(可能)返回一个 SessionID。然后,此 Login() 或 SessionID() 检查方法将先于访问所有其他方法。由于它是一个 webHTTPBinding——实际上是一个无状态的 Web 服务——你需要在处理每个请求之前检查 SessionID 或 ID/密码。

所以工作流程应该是这样的:

1) client sends Login() request to host
2) host checks ID/Password against DB, creates SessionID in DB that times out after x hours, forcing new Login(). SessionID is returned in response to client,.
3) In all subsequent requests, client must provide that SessionID. That SessionID would be checked on the DB, returning stored information about the client (Role, name, ID, address ... whatever is useful) before the remainder of the request is processed. 

有一些方法可以在请求到达您的工作代码之前对用户进行身份验证(例如使用表单或客户端证书进行客户端身份验证(请参阅http://msdn.microsoft.com/en-us/library/ff405740.aspx))。这会将 Login() / SessionID 检查转移到在请求到达主程序之前执行的方法,但步骤基本相同。

由于在网络上以明文形式传递 ID/密码是禁忌,因此您需要在网络服务上实施 SSL(请参阅 http://msdn.microsoft.com/en-us/library/ff650785.aspx

我所描述的一切基本上都是独立于平台的,因此,如果您将拥有 iOS 或 Android 客户端,那么我所描述的内容中没有任何内容会阻止这些操作系统与您的 Web 服务成功交互。

祝你好运。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多