我是身份服务器新手,对 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();
}
下面是cookies的屏幕截图
观察
我注意到我的客户端应用程序始终保持登录状态。即使第二天它也不会要求我登录。然而,每隔几个小时,我的 Web API 就会抛出 UNAUTHORIZED 响应代码。当我从客户端应用程序注销并再次登录时,API 再次开始正常工作。有些事情告诉我,也许不记名令牌已经过期了。
目标
我只是想知道如何完全控制cookie。我希望客户端应用程序在服务器端的 cookie 过期、web api 端的 cookie 过期或客户端应用程序的 cookie 过期时自动注销。 我还想知道如何控制cookie的过期时间。以及如何刷新不记名令牌(如果它们过期)。
如果我没记错的话,访问令牌的默认生命周期是 1 小时,您需要实现对刷新令牌的支持,以便在访问令牌即将过期时更新令牌。
您还可以在 AddCookie(...) 中配置客户端 cookie 生存期。
这对你有帮助吗?
参见 https://docs.duendesoftware.com/identityserver/v5/bff/extensibility/tokens/
我也面临同样的问题,我的cookie滑动工作得很好,但是当我尝试使用令牌从后端访问端点时,它只会抛出未经授权的错误。不知道为什么,但我猜当前请求中 httpcontext 的令牌过期没有被滑动。我尝试在调用 http 请求之前手动设置它,但在下一个后续请求中它仍然会得到旧的过期时间。当我们滑动 cookie 过期时间时,对于更新令牌过期时间有什么帮助吗?
注意:我们没有使用 duende id,而是使用旧的 ids4