我正在探索面向服务的基本架构,我想知道如何在整个服务中最好地处理用户身份验证。
作为一个非常简单的例子,假设我们有一个博客应用程序,可以调用另外两个服务:
假设该应用程序的用户正在尝试删除特定帖子,并且只允许具有“管理员”角色的用户这样做。
需要提出以下要求:
app - > AUTH
验证当前用户(通过某种令牌)。如果令牌过期,应用程序可以将用户重定向到登录表单等。
app - >讯息
删除帖子。
帖子 - > AUTH
在删除帖子之前,帖子服务需要确保请求用户有权这样做。验证当前用户(通过令牌)并确保他们具有“admin”角色。
这是一个非常简单的例子,但我很好奇人们如何在他们的服务中处理auth。似乎每个服务都需要单独调用身份验证服务才能授权请求。是这样的吗?在这种SOA中有没有更好的方法来处理auth?
谢谢!
答案 0 :(得分:6)
您可以实施identity provider - 一旦用户使用授权/身份验证服务进行身份验证,她就会获得一个标识她的令牌。此令牌可以识别她(角色/声明)并由身份验证/授权服务私钥签名。当服务获取安全令牌并且由受信任的机构签名时,它不需要再次转到身份验证/授权服务。
如果您的系统具有更高的安全要求(例如,在用户级别),您可能需要精心设计的声明或在每个请求上访问授权系统。我曾经在一个系统上工作过一次,其中某些类型的信息需要在每次访问时获得授权,其他类型的基于角色的安全性都可以 - 您的millage可能会有所不同。