【问题标题】:Claims based access control - how to implement 'System' user?基于声明的访问控制 - 如何实现“系统”用户?
【发布时间】:2014-11-05 23:24:05
【问题描述】:

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

  • 前端
  • 服务 A
  • 服务 B

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

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

但是现在我遇到了服务 A 在运行过程中没有用户上下文的情况。它发生了:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    简短的回答是:如果你没有人扮演,那就扮演你自己。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 2016-12-27
      • 2012-12-06
      • 2020-02-28
      • 2016-07-26
      • 1970-01-01
      • 2020-12-12
      相关资源
      最近更新 更多