OAuth JWT 访问令牌过期取决于客户端类型
OAuth JWT access token expiration depending on type of client
我基于 Taiseer's tutorial 创建了一个 JWT 令牌实现。
以下代码已添加到我的 Owin 启动程序中 class:
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = HttpContext.Current.IsDebuggingEnabled,
TokenEndpointPath = new PathString("/oauth2/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(90),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat("http://example.com/")
};
现在有不同类型的应用程序使用 API。对于 Web 客户端,90 分钟的过期时间就足够了,但对于移动应用程序来说,这太短了。
有没有办法让移动应用程序的令牌在 1 年后过期?我可以使用自定义 HTTP headers 来区分应用程序的类型。我试图在我的 CustomJwtFormat class 的 Protect 方法中延长到期时间,这确实允许 JWT 中有更大的到期时间。
public class CustomJwtFormat : ISecureDataFormat<AuthenticationTicket> {
public string Protect(AuthenticationTicket data) {
... emitted for brevity ...
string appId = HttpContext.Current.Request.Headers.GetValues("my-custom-header").FirstOrDefault();
if (appId == null)
throw new ApplicationException("Application ID header is missing");
if (appId.ToLower() == "mobileappheader") {
// set expiration to 1 year
expires = DateTimeOffset.UtcNow.AddYears(1);
}
var token = new JwtSecurityToken(issuer, audienceId, data.Identity.Claims,
issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingkey);
但在授权响应中,它仍然说 90 分钟:
{
"access_token": "eyJ0eX...0CLY6jU",
"token_type": "bearer",
"expires_in": 5399
}
如您所见,expires_in
仍设置为 90 分钟时间跨度。
尽管服务器的响应指示 90 分钟到期,ASP.NET web api 会查看票据内部以确定到期时间。因此,如果我将其默认设置为 90 分钟(在 startup.cs 中)并将我的移动应用程序设置为 1 年,那么我的移动应用程序将有 1 年的有效期。
我基于 Taiseer's tutorial 创建了一个 JWT 令牌实现。
以下代码已添加到我的 Owin 启动程序中 class:
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = HttpContext.Current.IsDebuggingEnabled,
TokenEndpointPath = new PathString("/oauth2/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(90),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat("http://example.com/")
};
现在有不同类型的应用程序使用 API。对于 Web 客户端,90 分钟的过期时间就足够了,但对于移动应用程序来说,这太短了。
有没有办法让移动应用程序的令牌在 1 年后过期?我可以使用自定义 HTTP headers 来区分应用程序的类型。我试图在我的 CustomJwtFormat class 的 Protect 方法中延长到期时间,这确实允许 JWT 中有更大的到期时间。
public class CustomJwtFormat : ISecureDataFormat<AuthenticationTicket> {
public string Protect(AuthenticationTicket data) {
... emitted for brevity ...
string appId = HttpContext.Current.Request.Headers.GetValues("my-custom-header").FirstOrDefault();
if (appId == null)
throw new ApplicationException("Application ID header is missing");
if (appId.ToLower() == "mobileappheader") {
// set expiration to 1 year
expires = DateTimeOffset.UtcNow.AddYears(1);
}
var token = new JwtSecurityToken(issuer, audienceId, data.Identity.Claims,
issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingkey);
但在授权响应中,它仍然说 90 分钟:
{
"access_token": "eyJ0eX...0CLY6jU",
"token_type": "bearer",
"expires_in": 5399
}
如您所见,expires_in
仍设置为 90 分钟时间跨度。
尽管服务器的响应指示 90 分钟到期,ASP.NET web api 会查看票据内部以确定到期时间。因此,如果我将其默认设置为 90 分钟(在 startup.cs 中)并将我的移动应用程序设置为 1 年,那么我的移动应用程序将有 1 年的有效期。