面向服务架构的集中式身份验证

sct*_*lsn 13 authentication soa authorization web-services

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

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

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

假设应用程序的用户正在尝试删除特定帖子,并且只允许具有"admin"角色的用户这样做.

需要提出以下要求:

  • app - > auth

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

  • app - >帖子

    删除帖子.

  • 帖子 - > auth

    在删除帖子之前,帖子服务需要确保请求用户有权这样做.验证当前用户(通过令牌)并确保他们具有"admin"角色.

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

谢谢!

Arn*_*-Oz 6

您可以实现身份提供程序 - 一旦用户使用授权/身份验证服务进行身份验证,她就应该获得一个标识她的令牌.此令牌可以识别她(角色/声明)并由身份验证/授权服务私钥签名.当服务获取安全令牌并且由受信任的机构签名时,它不需要再次转到身份验证/授权服务.

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

  • @Michael 而不是什么?OpenID 用于身份验证,问题是关于授权。OpenAM 只是一个例子,还有其他方法和技术 (2认同)