基于声明的访问控制 - 如何实现'系统'用户?

时间:2014-11-05 13:28:00

标签: web-services soa wif claims-based-identity federated-identity

我们的系统中有三个通信方:

  • 前端
  • 服务A
  • 服务B

此外,我们还拥有独立的安全令牌服务,即我们的身份提供商。

经过身份验证的用户与前端交互,它调用服务A,服务A又调用服务B.用户的访问令牌使用“poor's man identity delegation”通过此管道传递。服务A和服务B基于传递的身份中的声明来授权(或不授权)用户的操作。每个人都很开心!

但是现在我遇到了服务A在操作期间没有用户上下文的情况。它发生了:

    启动时
  • 当服务A处理来自消息总线的消息
  • 当计时器触发时

在每种情况下,服务A需要调用服务B来获取一些数据,但它接收401,因为没有访问令牌传递给服务B.

有没有最佳实践如何处理这种情况?我现在唯一的想法是在我们的身份提供者中注册“系统”用户(每个服务A,服务B,服务C等可能的用户),获取该用户的访问令牌并在上述情况下使用它。但我闻起来不好,我正在寻找其他想法。

任何建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

简短的回答是:如果你没有人采取行动,那就行动吧。

即使使用“穷人的身份识别委托”,服务A也会使用某种机制在STS进行身份验证。在您发布的链接中,正在使用证书。因此,实现获取令牌的新方法。您已经拥有一个获取ActAs令牌的方法,因此您需要实现一个获取用户令牌(用于服务A)的方法。

您的STS应该已经知道这个“系统”用户,因为它允许他请求ActAs令牌。您只需要向系统用户分配一些声明,即使它不代表任何用户行动,也可以定义它可以做什么。