我正在尝试将刷新令牌的生命周期设置为2周。我尝试过.. FromSeconds,FromMinutes,FromHours,但它总是将刷新令牌设置为与访问令牌相同的生命周期。我将不胜感激任何帮助。这是我目前在configureServices中的内容:
services.AddOpenIddict(options =>
{
// Register the Entity Framework stores.
options.AddEntityFrameworkCoreStores<AppDbContext>();
// Register the ASP.NET Core MVC binder used by OpenIddict.
// Note: if you don't call this method, you won't be able to
// bind OpenIdConnectRequest or OpenIdConnectResponse parameters.
options.AddMvcBinders();
// Enable the token endpoint.
options.EnableTokenEndpoint("/connect/token");
// Enable the password flow.
options.AllowPasswordFlow()
.AllowRefreshTokenFlow()
.SetAccessTokenLifetime(TimeSpan.FromMinutes(1))
.SetRefreshTokenLifetime(TimeSpan.FromMinutes(20160));
// During development, you can disable the HTTPS requirement.
options.DisableHttpsRequirement();
});
答案 0 :(得分:0)
请注意:以下帖子无法解决问题: http://kosmisch.net/Blog/DotNetEssential/Archive/2017/9/11/openiddict-refresh-token-flow-issue-aspnet-core-20.html
有关此问题的最新摘要: 使用用户名和密码登录时,会在openiddicttoken表中插入以下数据:
Id ApplicationId AuthorizationId Ciphertext End Hash Start Status Subject Type
1 NULL NULL NULL 2017-10-12 11:24:26.0000000 +00:00 NULL 2017-09-12 11:24:26.0000000 +00:00有效1 refresh_token
然后完成了refresh_token授权类型请求。 上述记录已更新,只有更改是状态列,已从有效更改为已兑换
Id ApplicationId AuthorizationId Ciphertext End Hash Start Status Subject Type
1 NULL NULL NULL 2017-10-12 11:24:26.0000000 +00:00 NULL 2017-09-12 11:24:26.0000000 +00:00兑换1 refresh_token
响应JSON不包含新的刷新令牌属性。
我认为对于第二次刷新,我认为至少有一个Start或End列应该更改,因为我配置为使用滑动到期。
但事实并非如此。所以我认为这个刷新令牌方法可能存在一个问题。你能看一下吗?
在示例中:https://github.com/openiddict/openiddict-samples/tree/dev/samples/RefreshFlow
我下载了,每次刷新完成时都可以看到,会插入一个新的令牌,这与我的行为非常不同。顺便说一句,我已经更改了示例代码以使用幻灯片过期。
主要区别在于我的模型使用int作为TKey,而样本使用GUID。所以我想知道这是否与此有关?
options.UseOpenIddict<int>();
找出问题的根本原因:
// Create a new authentication ticket holding the user identity.
var ticket = new AuthenticationTicket(principal, *new AuthenticationProperties(),* OpenIdConnectServerDefaults.AuthenticationScheme);
虽然它应该是:
// Create a new authentication ticket holding the user identity.
var ticket = new AuthenticationTicket(principal, properties, OpenIdConnectServerDefaults.AuthenticationScheme);