使用 JwtBearerAuthentication 在 aspnet5 rc1 Web API2 身份 3 中发出刷新令牌
Issue a refresh token in aspnet5 rc1 Web API2 identity 3 using JwtBearerAuthentication
我目前陷入了如何在 aspnet5 中实现刷新令牌流的机制。
目标:我想拦截每一笔交易来检查令牌是否已过期或即将过期,如果是,则更新它。 (我已经在验证它的签名)。
我发现在设置 JWT 选项时,我可以在 Startup.cs 中发现到期时间:
app.UseJwtBearerAuthentication(options =>
{
options.Audience = "http://localhost:7001";
//options.Authority = "http://localhost:7001";
options.AutomaticAuthenticate = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
LifetimeValidator = (DateTime? notBefore, DateTime? expires, SecurityToken securityToken, TokenValidationParameters validationParameters) =>
{
if (expires.Value < DateTime.UtcNow)
{
// it's expired! issue a refresh token here?
return false;
}
return true;
},
IssuerSigningKey = key,
ValidAudience = tokenOptions.Audience,
ValidIssuer = tokenOptions.Issuer,
ValidateSignature = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(10)
};
});
目前这只是抛出一个异常"Lifetime validator failed"..这就是我所在的位置。
我这样做的方式正确吗? 这是检查过期的正确位置吗?我如何具体要求 API 从这里发出刷新令牌?
Am I going about this the right way? Is this the right place to be checking expiration?
否:尽管资源服务器(即 API 端点)应始终确保收到的令牌仍然有效,但更新过期令牌不是他们的责任。
这绝对是客户端应用程序应该向发布刷新令牌的授权服务器询问的事情。为此,他们可以使用令牌响应中返回的 expires_in
属性 作为提示 and/or 从您的 API 捕获 401 响应以确定他们使用的访问令牌是否是仍然有效。
How specifically do I ask the API to issue a refresh token from here?
从刷新令牌颁发新的访问令牌通常由授权 server/identity 提供商完成。如果您添加有关应用程序这方面的更多详细信息(是否支持 OAuth2 或 OpenID Connect?),那肯定会有所帮助
使用 OAuth2 服务器时,可以使用 refresh_token
授权来检索新的访问令牌:
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
我目前陷入了如何在 aspnet5 中实现刷新令牌流的机制。
目标:我想拦截每一笔交易来检查令牌是否已过期或即将过期,如果是,则更新它。 (我已经在验证它的签名)。
我发现在设置 JWT 选项时,我可以在 Startup.cs 中发现到期时间:
app.UseJwtBearerAuthentication(options =>
{
options.Audience = "http://localhost:7001";
//options.Authority = "http://localhost:7001";
options.AutomaticAuthenticate = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
LifetimeValidator = (DateTime? notBefore, DateTime? expires, SecurityToken securityToken, TokenValidationParameters validationParameters) =>
{
if (expires.Value < DateTime.UtcNow)
{
// it's expired! issue a refresh token here?
return false;
}
return true;
},
IssuerSigningKey = key,
ValidAudience = tokenOptions.Audience,
ValidIssuer = tokenOptions.Issuer,
ValidateSignature = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(10)
};
});
目前这只是抛出一个异常"Lifetime validator failed"..这就是我所在的位置。
我这样做的方式正确吗? 这是检查过期的正确位置吗?我如何具体要求 API 从这里发出刷新令牌?
Am I going about this the right way? Is this the right place to be checking expiration?
否:尽管资源服务器(即 API 端点)应始终确保收到的令牌仍然有效,但更新过期令牌不是他们的责任。
这绝对是客户端应用程序应该向发布刷新令牌的授权服务器询问的事情。为此,他们可以使用令牌响应中返回的 expires_in
属性 作为提示 and/or 从您的 API 捕获 401 响应以确定他们使用的访问令牌是否是仍然有效。
How specifically do I ask the API to issue a refresh token from here?
从刷新令牌颁发新的访问令牌通常由授权 server/identity 提供商完成。如果您添加有关应用程序这方面的更多详细信息(是否支持 OAuth2 或 OpenID Connect?),那肯定会有所帮助
使用 OAuth2 服务器时,可以使用 refresh_token
授权来检索新的访问令牌:
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA