如何让 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(..) 处理程序中没有处理刷新令牌更新的逻辑。我认为刷新它们取决于您的应用程序。如果您已将刷新令牌保存在安全的地方,则在代码中刷新它们并不难。
看到这个问题
我有一个连接到 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(..) 处理程序中没有处理刷新令牌更新的逻辑。我认为刷新它们取决于您的应用程序。如果您已将刷新令牌保存在安全的地方,则在代码中刷新它们并不难。
看到这个问题