我使用带有 asp.net mvc 后端的fine-uploader将文件直接上传到azure blob存储。 asp.net-server 用作 azure-signature-endpoint(sas)。这一切都通过 identityserver3 进行保护,但问题来了:identity_tokens 生命周期 设置为 5 分钟(默认)。我希望 SAS 端点仅被称为授权的。因此用户只能访问自己的数据。但当我上传运行 5 分钟后,它就中断了。当然,因为它未经授权,并且它从身份服务器返回登录页面(当然,精细 uploader 无法处理)。
解决这个问题很容易,可以将 token 的生命周期设置为更高的值(但这并不可靠,因为上传可能需要数小时或数天),或者禁用生命周期(是的,可以。但我想生命周期有存在的理由)。
所以我的两个想法是:
- 仅授权用户一次(当他开始下载时)
- 或者在每次生成签名时通过代码刷新 token 。
第一种方法
我可以设置一个 bool 值,例如用户已授权,如果设置了此 bool 值,则跳过授权并返回签名,或者我如何实现此目的
第二种方法
我该怎么做?
最佳答案
不要使用 id token 进行 API 访问,而是使用访问 token 。访问 token 用于资源(API),而 id_tokens 纯粹用于身份验证。 id_token 仅用于为 RP 提供了解用户是谁的方法 - 因此不需要很长的时间跨度。它仅用于转换为用户 session (cookie/主体)。
使用访问 token ,您可以通过多种方法在客户端保留有效 token ;通过使用客户端凭据流获取新凭据或使用刷新 token 方法。
我相信 IdentityServer 的示例存储库中都有这两个示例。
关于c# - 从代码中刷新客户端的身份 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39593468/