如何为身份服务器、网络 api 和客户端应用程序设置 cookie 过期时间?
How to set cookie expiration times for identity server, web api and client app?
我是身份服务器的新手,对 cookie 管理知之甚少。
我已经使用 IDS4 配置了一个 Web api 和一个客户端应用程序。下面是我在身份服务器中的startup.cs。
public void ConfigureServices(IServiceCollection services)
{
//...
var builder = services.AddIdentityServer(options =>
{
options.EmitStaticAudienceClaim = true;
options.IssuerUri = "https://localhost:5001";
})
//...
}
这是我在 web api
中添加身份验证的扩展方法
public static void AddCustomAuthentication(this IServiceCollection services, IConfiguration Configuration)
{
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
// tell the system base address of identity server
options.Authority = Configuration["IdentityServerUri"];
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false
};
});
}
这是我在 客户端应用程序
中添加身份验证的扩展方法
public static void AddCustomAuthentication(this IServiceCollection services, IConfiguration Configuration)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie(options =>
{
options.Cookie.Name = "CorpLense.HR.WebClient";
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = Configuration["IdentityServerUri"];
options.SignInScheme = "Cookies";
options.ClientId = "CorpLense.HR.WebClient";
options.ClientSecret = "***";
options.ResponseType = "code";
options.SaveTokens = true;
// get claims
// request access to scopes
});
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
}
下面是 cookie 的屏幕截图
观察结果
我注意到我的客户端应用程序一直保持登录状态。它甚至不要求我在第二天登录。然而,每隔几个小时,我的网站 API 就会抛出 UNAUTHORIZED 响应代码。当我从我的客户端应用程序注销并再次登录时,api 再次开始正常工作。有些事情告诉我,也许不记名令牌已过期。
OBJECTIVE
我只是想知道如何完全控制 cookie。我希望客户端应用程序在服务器端的 cookie 已过期时自动注销,或者网络 api 端的 cookie 已过期,或者客户端应用程序上的 cookie 已过期。
我还想知道如何控制 cookie 过期时间。以及过期后如何刷新不记名令牌。
如果我没记错的话,访问令牌的默认生命周期是 1 小时,您需要实现对刷新令牌的支持,以便在访问令牌即将过期时更新令牌。
您还可以在 AddCookie(...) 中配置客户端 cookie 生命周期。
这对你有帮助吗?
见https://docs.duendesoftware.com/identityserver/v5/bff/extensibility/tokens/
我是身份服务器的新手,对 cookie 管理知之甚少。 我已经使用 IDS4 配置了一个 Web api 和一个客户端应用程序。下面是我在身份服务器中的startup.cs。
public void ConfigureServices(IServiceCollection services)
{
//...
var builder = services.AddIdentityServer(options =>
{
options.EmitStaticAudienceClaim = true;
options.IssuerUri = "https://localhost:5001";
})
//...
}
这是我在 web api
中添加身份验证的扩展方法public static void AddCustomAuthentication(this IServiceCollection services, IConfiguration Configuration)
{
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
// tell the system base address of identity server
options.Authority = Configuration["IdentityServerUri"];
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false
};
});
}
这是我在 客户端应用程序
中添加身份验证的扩展方法public static void AddCustomAuthentication(this IServiceCollection services, IConfiguration Configuration)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie(options =>
{
options.Cookie.Name = "CorpLense.HR.WebClient";
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = Configuration["IdentityServerUri"];
options.SignInScheme = "Cookies";
options.ClientId = "CorpLense.HR.WebClient";
options.ClientSecret = "***";
options.ResponseType = "code";
options.SaveTokens = true;
// get claims
// request access to scopes
});
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
}
下面是 cookie 的屏幕截图
观察结果
我注意到我的客户端应用程序一直保持登录状态。它甚至不要求我在第二天登录。然而,每隔几个小时,我的网站 API 就会抛出 UNAUTHORIZED 响应代码。当我从我的客户端应用程序注销并再次登录时,api 再次开始正常工作。有些事情告诉我,也许不记名令牌已过期。
OBJECTIVE
我只是想知道如何完全控制 cookie。我希望客户端应用程序在服务器端的 cookie 已过期时自动注销,或者网络 api 端的 cookie 已过期,或者客户端应用程序上的 cookie 已过期。 我还想知道如何控制 cookie 过期时间。以及过期后如何刷新不记名令牌。
如果我没记错的话,访问令牌的默认生命周期是 1 小时,您需要实现对刷新令牌的支持,以便在访问令牌即将过期时更新令牌。
您还可以在 AddCookie(...) 中配置客户端 cookie 生命周期。
这对你有帮助吗?
见https://docs.duendesoftware.com/identityserver/v5/bff/extensibility/tokens/