覆盖 AccessTokenExpireTimeSpan
Override AccessTokenExpireTimeSpan
是否可以覆盖自定义 OAuthAuthorizationServerProvider 上特定票证的默认 AccessTokenExpireTimeSpan?所有其他票证的默认到期时间为 15 分钟。
public public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
...
var ticket = new AuthenticationTicket(identity, properties);
if (condition)
{
ticket.Properties.IssuedUtc = DateTime.UtcNow;
ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(14);
}
context.Validated(ticket);
}
条件== true 生成的令牌具有默认的到期时间(15 分钟)。我不想更改 context.Options.AccessTokenExpireTimeSpan,因为它会影响所有标记,这不是我的想法。
您必须在 TokenEndPoint
方法而不是 GrantResourceOwnerCredentials
方法中设置过期时间:
public override Task TokenEndpoint(OAuthTokenEndpointContext context)
{
...
if (condition)
{
context.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(14);
}
...
}
希望对您有所帮助。
编辑
正如 Michael in his 对类似问题所指出的那样,如果您对每个 client_id 有不同的 AccessTokenExpireTimeSpan
,您可以在上下文选项中覆盖默认配置的 AccessTokenExpireTimeSpan
验证客户端身份验证时与客户端一:
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
...
context.Options.AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(client.AccessTokenExpireTime);
...
}
这适用于您的上下文(哈哈):
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.Options.AccessTokenExpireTimeSpan = YourCustomExpiryTimeHere();
}
但请注意,每次调用都需要更新,否则您分配的最后一个值将保留用于下一次登录。
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
// Note: a= how much time u want
Startup.OAuthOptions.AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(a);
}
还有许多不同的选项,例如:
FromDays,FromHours,FromMilliseconds,FromMinutes
是否可以覆盖自定义 OAuthAuthorizationServerProvider 上特定票证的默认 AccessTokenExpireTimeSpan?所有其他票证的默认到期时间为 15 分钟。
public public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
...
var ticket = new AuthenticationTicket(identity, properties);
if (condition)
{
ticket.Properties.IssuedUtc = DateTime.UtcNow;
ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(14);
}
context.Validated(ticket);
}
条件== true 生成的令牌具有默认的到期时间(15 分钟)。我不想更改 context.Options.AccessTokenExpireTimeSpan,因为它会影响所有标记,这不是我的想法。
您必须在 TokenEndPoint
方法而不是 GrantResourceOwnerCredentials
方法中设置过期时间:
public override Task TokenEndpoint(OAuthTokenEndpointContext context)
{
...
if (condition)
{
context.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(14);
}
...
}
希望对您有所帮助。
编辑
正如 Michael in his AccessTokenExpireTimeSpan
,您可以在上下文选项中覆盖默认配置的 AccessTokenExpireTimeSpan
验证客户端身份验证时与客户端一:
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
...
context.Options.AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(client.AccessTokenExpireTime);
...
}
这适用于您的上下文(哈哈):
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.Options.AccessTokenExpireTimeSpan = YourCustomExpiryTimeHere();
}
但请注意,每次调用都需要更新,否则您分配的最后一个值将保留用于下一次登录。
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
// Note: a= how much time u want
Startup.OAuthOptions.AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(a);
}
还有许多不同的选项,例如:
FromDays,FromHours,FromMilliseconds,FromMinutes