Identityserver4 访问长时间运行任务的令牌

Identityserver4 访问长时间运行任务的令牌,identityserver4,openid-connect,refresh-token,Identityserver4,Openid Connect,Refresh Token,假设是这样的: 前端应用程序使用隐式流请求身份验证,用户已登录。该应用程序为用户提供了创建任务/作业的功能,该任务/作业应在未来的预定时间点代表用户执行许多事情。这也可能是一项跨越数小时(甚至数天)的长时间运行的任务。前端应用程序有自己的客户端id(隐式流),而执行计划任务的服务有单独的客户端id(和机密) 问题: 前端应用程序应该向计划任务传递什么,以便执行计划任务的服务可以作为原始用户进行身份验证 假设任务应该使用刷新令牌进行操作,以便在需要时可以获得新的访问令牌,那么它首先如何获得刷新令

假设是这样的:

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

问题:

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

  • 假设任务应该使用刷新令牌进行操作,以便在需要时可以获得新的访问令牌,那么它首先如何获得刷新令牌?前端应用程序无法通过第一个,因为隐式流中不支持刷新令牌,即使支持刷新令牌,也会将其发送到错误的客户端


    • 一个好主意是考虑授权。有了这个概念,您的服务可以检索一个新的令牌,该令牌将自己标识为用户,但具有标识服务的特殊“act”声明。

      Identity server在版本4中不再使用默认设置,但有一些示例介绍了如何将其添加回。这种情况非常简单,正如您所说,您可以信任您的服务,所以您真正需要的是告诉IdentityServer允许clientid模拟任何人
      这里有一个例子

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