1

我正在尝试将我的刷新令牌生命周期设置为 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();
});
4

1 回答 1

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);
于 2017-09-11T12:52:24.473 回答