我正在尝试对REST WCF服务实现基于角色的身份验证。我阅读了很多关于这个主题的信息,但没有清楚地了解我必须做什么。 我了解如何使用[PrincipalPermission]属性限制对服务的访问,但不知道如何检查用户是否属于某个角色。 因此,如果有人能以正确的方式指导我,我将非常感激(例如,制定路线图,我应该做些什么才能实现这一目标。)
让我来描述一下这种情况。我有一个托管在服务器A上的远程服务和托管在服务器B上的ASP.Net MVC客户端。 所有这些休息服务都可以访问数据库,在那里我可以读取用户是否有权访问该服务的信息。
答案 0 :(得分:0)
好的,Tequila,IMO根据您的描述,您真正想要的是一个普通的REST WCF服务,其中Login(ID为字符串,PWD为字符串)方法(可能)返回SessionID。然后,此Login()或SessionID()检查方法将访问所有其他方法。因为它是webHTTPBinding - 实际上是无状态Web服务 - 您需要在处理每个请求之前检查SessionID或ID / Password。
因此工作流程将是这样的:
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.
在请求到达您的工作代码之前,有一些方法可以对用户进行身份验证(例如使用Forms或客户端证书进行客户端身份验证(请参阅http://msdn.microsoft.com/en-us/library/ff405740.aspx))。这会将Login()/ SessionID检查转移到请求到达主程序之前执行的方法,但步骤基本相同。
由于通过网络以明文形式传递ID / Pwd是禁忌,因此您需要在您的网络服务上实施SSL(请参阅http://msdn.microsoft.com/en-us/library/ff650785.aspx)
我所描述的一切基本上都与平台无关,所以如果您拥有iOS或Android客户端,我所描述的内容中没有任何内容可以禁止这些操作系统成功地与您的Web服务进行交互。
祝你好运。