如何让 Owin 在访问令牌过期时自动使用刷新令牌

How to make Owin automatically use refresh token when access token expires

我有一个连接到 IdentityServer 4 的 Owin 客户端,我想知道如何让 owin 使用刷新令牌请求一个新的 access_token。我可以成功地让 owin 使用以下配置交换 access_token、id_token 和 refresh_token 的代码:

public void Configuration(IAppBuilder app)
        {
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = "Cookie"
            });
            app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                Authority = "http://localhost:5000",
                ClientId = "mywebsite",
                ClientSecret = "secret",
                RedirectUri = "https://localhost:5001/",
                ResponseType = "code",
                RequireHttpsMetadata = false,
                SaveTokens = true,
                UseTokenLifetime = true,
                SignInAsAuthenticationType = "Cookie",
                Scope = "openid profile email offline_access",
                RedeemCode = true,
                
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    SecurityTokenValidated = n =>
                    {
                        Console.WriteLine(n);
                        return System.Threading.Tasks.Task.FromResult(0);
                    },
                    TokenResponseReceived = n =>
                    {
                        Console.WriteLine(n);
                        return System.Threading.Tasks.Task.FromResult(0);
                    }
                },
                
            });
        }

首先,我要把这些令牌保存到哪里?我可以访问它们所有的 SecurityTokenValidated 回调——它们应该进入声明吗?数据库?内存?

其次,我在我的 IdentityServer 客户端配置中将 access_token 生命周期设置为 60 秒,identity_token 设置为 3600 秒,并刷新为 30 天(请注意 access_token 仅这只是为了测试目的)。那么我如何配置 Owin 以识别 access_token 已过期并且它需要使用 refresh_token 返回到身份服务器并获得一个新的。示例代码片段的答案将不胜感激,因为我对这一切的了解非常少。

相关信息: IS4 v3 .Net Framework v4.6 客户端在 IS 中设置为允许离线访问

看看这篇文章:

除此之外,AddOpenIdConnect(..) 处理程序中没有处理刷新令牌更新的逻辑。我认为刷新它们取决于您的应用程序。如果您已将刷新令牌保存在安全的地方,则在代码中刷新它们并不难。

看到这个问题