如果服务器重新启动,我可以从客户端请求 IdentityServer4 令牌吗?
Can I request IdentityServer4 tokens from client if server was rebooted?
ID4上的问题很难问。此外,所有相关讨论我都可以 google 指向不存在的代码示例链接。
我有:angular 客户端使用由 Microsoft 提供的 MVC 页面组成的 ID4 身份验证,托管在 ASP.NET 核心中。
Startup.cs
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<AppDbContext>();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, AppDbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
. . .
app.UseAuthentication();
app.UseIdentityServer();
app.UseAuthorization();
authorize.service.ts
const settings: any = await response.json();
settings.automaticSilentRenew = true;
settings.includeIdTokenInSilentRenew = true;
this.userManager = new UserManager(settings);
用例:用户登录网页,勾选“记住我”复选框并使用经过授权的网站部分。如果服务器重新启动 - 令牌丢失并且用户与网站的交互变得中断 - 例如Webbrowser 控制台中没有错误,如果用户尝试访问任何服务器端数据,也不会发生任何事情。看起来什么都没有。不像是授权有问题。
只能手动修复logout/login。或者打开新标签页并再次转到该应用程序。
是否有关于如何 a) 检测客户端令牌损坏和 b) 请求新令牌的简单解释?
编辑 如果用户在下一个工作日继续使用网站或打开新的浏览器选项卡(无需重新启动服务器),ID4 将按预期工作 - 无需登录。
小提琴手:
简短的回答是:如果服务器进程(应用程序后端或基于 identityserver4
的 IDP)重新启动,则不会中断任何事情,所以您可能会缺少一些持久性(对于持久授权)and/or 共享配置(例如令牌签名密钥和 ASP.Net 数据保护密钥)并且在启动时重新生成内容并且内存中的数据正在丢失。
本文介绍了部署可行的生产服务需要考虑的事项:https://docs.identityserver.io/en/latest/topics/deployment.html
所有这些都准备就绪,但令牌仍然会过期,并且有几种方法可以根据使用的上下文和授权类型来刷新它们。
检测令牌是否不再有效:
- 使用它并检测您是否从正在调用的端点收到 401 响应
- 亲自检查令牌中的
exp
声明
- 使用令牌返回的
expires_in
值并根据该值计算到期时间
要更新它(有些库会自动执行此操作):
- 使用基于 iframe 的静默更新机制(使用提示授权端点=none)- 请注意,第三方 cookie 限制在此发挥作用
- 通过令牌端点使用刷新令牌(不推荐用于客户端应用程序,因为需要在客户端保留刷新令牌)
ID4上的问题很难问。此外,所有相关讨论我都可以 google 指向不存在的代码示例链接。
我有:angular 客户端使用由 Microsoft 提供的 MVC 页面组成的 ID4 身份验证,托管在 ASP.NET 核心中。
Startup.cs
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<AppDbContext>();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, AppDbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
. . .
app.UseAuthentication();
app.UseIdentityServer();
app.UseAuthorization();
authorize.service.ts
const settings: any = await response.json();
settings.automaticSilentRenew = true;
settings.includeIdTokenInSilentRenew = true;
this.userManager = new UserManager(settings);
用例:用户登录网页,勾选“记住我”复选框并使用经过授权的网站部分。如果服务器重新启动 - 令牌丢失并且用户与网站的交互变得中断 - 例如Webbrowser 控制台中没有错误,如果用户尝试访问任何服务器端数据,也不会发生任何事情。看起来什么都没有。不像是授权有问题。
只能手动修复logout/login。或者打开新标签页并再次转到该应用程序。
是否有关于如何 a) 检测客户端令牌损坏和 b) 请求新令牌的简单解释?
编辑 如果用户在下一个工作日继续使用网站或打开新的浏览器选项卡(无需重新启动服务器),ID4 将按预期工作 - 无需登录。
小提琴手:
简短的回答是:如果服务器进程(应用程序后端或基于 identityserver4
的 IDP)重新启动,则不会中断任何事情,所以您可能会缺少一些持久性(对于持久授权)and/or 共享配置(例如令牌签名密钥和 ASP.Net 数据保护密钥)并且在启动时重新生成内容并且内存中的数据正在丢失。
本文介绍了部署可行的生产服务需要考虑的事项:https://docs.identityserver.io/en/latest/topics/deployment.html
所有这些都准备就绪,但令牌仍然会过期,并且有几种方法可以根据使用的上下文和授权类型来刷新它们。
检测令牌是否不再有效:
- 使用它并检测您是否从正在调用的端点收到 401 响应
- 亲自检查令牌中的
exp
声明 - 使用令牌返回的
expires_in
值并根据该值计算到期时间
要更新它(有些库会自动执行此操作):
- 使用基于 iframe 的静默更新机制(使用提示授权端点=none)- 请注意,第三方 cookie 限制在此发挥作用
- 通过令牌端点使用刷新令牌(不推荐用于客户端应用程序,因为需要在客户端保留刷新令牌)