【问题标题】:Access tokens for long-running tasks长时间运行任务的访问令牌
【发布时间】:2019-10-11 00:47:11
【问题描述】:

假设是这样的

前端应用程序使用隐式流程请求身份验证,并且用户已登录。该应用程序为用户提供了创建任务/作业的功能,该任务/作业应在未来的预定时间点代表用户执行许多操作。这也可能是一项跨越数小时(甚至数天)的长期任务。前端应用程序有自己的客户端 ID(带有隐式流),而执行计划任务的服务有一个单独的客户端 ID(和机密)。

问题:

  • 前端应用程序应该将什么传递给计划任务,以便执行计划任务的服务可以作为原始用户进行身份验证?

  • 假设任务应该使用刷新令牌运行,以便在需要时获取新的访问令牌,那么它首先如何获取刷新令牌?前端应用无法传递第一个,因为隐式流不支持刷新令牌,即使支持也会将其发送给错误的客户端。

【问题讨论】:

  • 看起来与this one 非常相似
  • 类似,是的,但它不能解决我试图描述的问题。我现在已经可以将用户 ID 或名称传递给任务运行程序,但使用客户端凭据将为其提供访问令牌,而不涉及用户,这将在稍后导致任务运行程序访问需要用户授权的资源时出现问题。
  • 您错过了重点:在链接的答案中,我建议稍后将访问令牌放入 extract userId。并且使用委托(基于客户端凭据)在需要的时候与用户在里面获得一个新的令牌。我认为您的“长时间运行的任务”没有区别
  • 将 userId 作为普通参数发送只是一种替代方法,但是当您绝对信任运行作业的服务并且它连接到以下 api 时,这是绝对有效的(例如,您可以使用客户端证书)
  • 链接答案中更重要的一点是 刷新令牌 不会被共享。因此,即使您从隐式切换到代码或混合以获取刷新令牌,它也旨在与唯一的客户端一起使用,而不是发送给另一个客户端(例如您的工作运行者)。

标签: identityserver4 openid-connect refresh-token


【解决方案1】:

一个好主意是查看委托。使用此概念,您的服务可以检索一个新令牌,该令牌将自己标识为用户,但具有标识该服务的特殊“行为”声明。 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-token-exchange-16

身份服务器在版本 4 中不再有此默认设置,但有一些示例说明如何将其重新添加。这种情况非常简单,因为您已经说过您可以信任您的服务,所以您真正需要的只是就是告诉IdentityServer允许clientid冒充任何人 这是一个例子https://www.daimto.com/identity-server-4-user-delegation/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多