2010-01-08 47 views
1

我想建立一个(现在)真正简单的Web服务。简单来说,我的意思是在代码方面只有少量的实际工作要做。它只有一个方法/功能:客户端发送用户登录信息,服务响应一个关于用户的非常安全的细节(针对这个问题,假设用户的生日)。针对一个Web服务的基于角色的方法?

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

我正在考虑有这种方法的两个版本。在版本一中,客户端只能创建一个没有可变信息的通用请求。该服务将以在客户会话中验证身份的人的生日作为回应。在版本二中,允许客户查询任何用户名(真的,他们想要的任何东西)并找回生日或“找不到”等。

提供两者的应用程序将使大多数开发人员会得到当前用户的出生日期,以便它可以应用于该会话。扩展我的例子:用户登录后,开发人员希望能够拥有“生日快乐”(如果适用)。服务/数据的所有者不希望开发人员的客户对任何有关用户的任何访问(真实的或概念的),即使他们登录,他们只是想适应开发人员的目标,因为它非常好。开发人员不想为可能访问任何东西负责,他只是想要很好。

第二版适用于某些用户支持组。他们实际上需要查找打电话的用户的生日,以便他们确认用户的年龄足够大,比如说租一辆车。他们甚至可能不得不查看多个用户,以查看谁最有资格参加该组,以获得最佳交易。

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

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

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

我在做梦中不可能的梦吗?

快速附录

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

+0

+1。非常有趣的一个。 – KB22 2010-01-08 13:09:28

回答

0

为什么不能有两个方法:

GetMyBirthday(); 

GetBirthday(string userName); 

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

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

+0

我想在我的脑海里,我试图隐藏方法来降低诱惑和内疚。我知道,当我看到一些整洁的东西时,我想尝试一下,当我“禁止”时,我想我会因为好奇而陷入困境。此外,这项服务在很长一段时间里一直是我的客户的加力燃烧,特别是因为安全是一个问题,我想给他们所有可以想象的保证。 – Anthony 2010-01-08 13:28:48