基于角色的一种Web服务方法?

时间:2010-01-08 13:03:04

标签: web-services soap wsdl roles

我正在尝试设置一个(现在)非常简单的Web服务。简单来说,我的意思是它只在代码端做了少量的实际工作。它只有一个方法/功能:客户端发送用户登录,服务响应用户的其他非常安全的细节(出于这个问题的目的,让我们说用户的生日)。

我有很多问题,但现在我想知道:

我正在考虑使用此方法的两个版本。在版本1中,客户端只能生成没有可变信息的通用请求。该服务将响应在客户端会话中进行身份验证的任何人的生日。在版本2中,允许客户端查询任何用户名(实际上,他们想要的任何东西)并返回生日或“找不到任何东西”等。

提供这两者的应用程序将使大多数开发人员获得当前用户的生日,以便它可以应用于该会话。为了扩展我的示例:用户登录,开发人员希望能够拥有“生日快乐”(如果适用)。服务/数据的所有者不希望开发人员的客户端对任何有关用户的信息,无论是真实的还是概念性的,甚至是他们的登录,他们只是想要适应开发人员的目标,因为它非常好。开发人员不想对可能访问任何东西负责,他只是想要变得更好。

第二版适用于某些用户支持组。他们实际上需要查找呼叫用户的生日,这样他们就可以确认用户已经足够老了,比方说,租一辆车。他们甚至可能需要查找多个用户,以查看哪些人最有资格获得最佳交易。

所以我想最重要的问题是,这两种方法是否可以存在于同一服务中?

此时,协议更可能是基于SOAP的,然后是RESTful,因此只需将URL解析为同一服务但只提供不同方法的URL可能不是一种选择。

理想情况下,我需要一种基于角色来揭示WSDL中的操作的方法。显然,给予任一组的文档只会反映适合该角色的操作,但理想情况下,开发人员/客户端会a)看不到任何他们不应该执行的操作,并且b)尝试使用禁止响应时收到相同类型的响应因为他们是一个不存在的,c)最理想的是,收到前面提到的错误,因为他们的角色操作真的不存在,不是因为服务采取额外的预防措施,以防客户端尝试(它会,仅供参考,但我不希望这是第一个也是唯一的混淆程度。)

我是在梦想这个不可能实现的梦想吗?

快速附录

我知道,我应该更加具体。当我说“基于角色”时,我指的是服务帐户,而不是用户帐户。因此,在我上面的假设情况中,用于查询任何用户ID的用户服务应用程序将使用一个具有priv的服务帐户来执行此操作,而不是检查登录到会话的代理的角色(这将是显然是为了进入应用程序,但不是服务)。

1 个答案:

答案 0 :(得分:0)

为什么没有两种方法:

GetMyBirthday();

GetBirthday(string userName);

任何用户都可以调用第一种方法;只有特权用户才能调用第二种方法。您使用基于角色的授权并拒绝未授权用户对第二种方法的调用。

我不明白你为什么要根据角色隐藏WSDL中的方法。在许多情况下,您将只访问WSDL以在开发环境中构建代理,并且在运行时不需要它。