我对刷新访问令牌有疑问。 我正在使用IdentityServer 4.1.2带有以下配置:
new Client
{
ClientId = "myid",
AllowedGrantTypes = GrantTypes.Code,
RequireClientSecret = false,
AccessTokenLifetime = 3600,
RequirePkce = true,
AllowOfflineAccess = true,
...
}
您可以看到我是使用不推荐的隐式流,但是赠款类型设置为code
MySpa客户端使用的是OIDC-CLIENT版本1.11.5,并以此方式配置:
var config = {
...
redirect_uri: `https://myspaurl/callback`,
response_type: 'code',
scope: 'openid profile offline_access',
automaticSilentRenew: true,
silent_redirect_uri: `https://myspaurl/static/silent-renew.html`,
...
};
注意,我要要求
offline_access示波器,所以我可以得到一个刷新令牌。当我运行应用程序时,访问令牌每小时都可以更新。 在Chrome Developer工具中的“网络”选项卡中,我可以看到使用此请求URL https:// myidentityServer/connect/token更新访问令牌。我的silent_redirect_uri https://myspaurl/static/silent-renew.html永远不会被要求。 因此,我的问题是使用赠款类型
code而不是旧隐式流程时,silent_redirect_uri是否过时?
如果OIDC客户端可以获得刷新令牌,则它将使用它而不是尝试使用无声重定向URI。考虑下一个这些动作:
用户重新加载页面
绝对不建议将RT存储在本地存储中,即使使用旋转刷新令牌,也不建议将RT存储在本地存储中。
2021建议是将刷新令牌存储在强烈加密的HTTP Samesite =严格的cookie中。这被称为前端模式的
返回端。 这很棘手,但值得一提的 - 也许是未来的目标。还请注意,oidc-client-js现在是一个存档的项目。它由oidc-client-ts
(截至目前,该继任者尚未获得OIDC认证)。