14

我正在探索基本的面向服务的架构,我想知道如何最好地处理整个服务中的用户身份验证。

作为一个非常简单的示例,假设我们有一个调用其他两个服务的博客应用程序:

  1. 用于存储用户数据和交换凭据以获取访问令牌的用户/身份验证服务
  2. 用于管理帖子数据的帖子服务

假设应用程序的用户正在尝试删除特定帖子,并且只有具有“管理员”角色的用户才能这样做。

需要提出以下要求:

  • 应用程序-> 身份验证

    验证当前用户(通过某种令牌)。如果令牌过期,应用程序可以将用户重定向到登录表单等。

  • 应用程序->帖子

    删除帖子。

  • 帖子->授权

    在删除帖子之前,帖子服务需要确保发出请求的用户有权这样做。验证当前用户(通过令牌)并确保他们具有“管理员”角色。

这是一个过于简单的例子,但我很好奇人们是如何在他们的服务中处理身份验证的。似乎每个服务都需要单独调用身份验证服务才能授权请求。是这样吗?在这种 SOA 中是否有更好的方法来处理身份验证?

谢谢!

4

1 回答 1

8

您可以实现身份提供者——一旦用户通过授权/身份验证服务进行身份验证,她应该获得一个标识她的令牌。此令牌可以识别她(角色/声明)并由身份验证/授权服务私钥签名。当服务获得安全令牌并由受信任的机构签名时,它不需要再次访问身份验证/授权服务。

如果您的系统有更高的安全要求(例如在用户级别),您可能需要详细声明或访问每个请求的授权系统。我曾经在一个系统上工作过,其中某些类型的信息在每次访问时都需要授权,而其他类型的信息对于基于角色的安全性来说是可以的——你的权限可能会有所不同。

于 2013-04-28T18:04:37.250 回答