从代码中刷新来自客户端的身份令牌

Refresh identity token from client from code

我正在使用带有 asp.net mvc 后端的精细上传器将文件直接上传到 azure blob 存储。 asp.net-server 用作 azure-signature-endpoint(sas)。这一切都由 identityserver3 保护,问题来了:identity_tokens lifetime 设置为 5 分钟(默认)。我希望 SAS 端点仅被称为授权。所以用户只能访问自己的数据。但是在我上传 运行 设定的 5 分钟后,它就中断了。当然,因为它没有被授权,而且它 return 是来自身份服务器的登录页面(精细上传器当然无法处理)。

解决这个问题很容易,方法是将令牌的生命周期设置得更高(但这不可靠,因为上传可能需要数小时或数天),或者禁用生命周期(是的,可以。但是我想生命是有存在的理由的)。

所以我的两个想法是:

  1. 只授权用户一次(当他开始下载时)
  2. 或者在每次生成签名时通过代码刷新令牌。

第一种方法

我能不能只设置一个布尔值,比如用户已获得授权,如果设置了这个布尔值,就跳过授权,只跳过 return 签名,或者我如何实现这个

第二种方法

我该怎么做?

不要使用 id 令牌进行 API 访问,而是使用访问令牌。访问令牌用于资源 (APIs),而 id_tokens 纯粹用于身份验证。 id_token 仅用于为 RP 提供了解用户身份的方法 - 因此不需要很长的时间跨度。它仅用于转换为用户会话 (cookie/principal)。

使用访问令牌,您可以通过多种方法在客户端保留有效令牌;通过使用客户端凭据流或使用刷新令牌方法获取新的。

我相信在 IdentityServer 的样本库中有两者的样本。

Samples repo link