asp.net-core - ASP.NET Core 3.1 OpenIDConnect,如何在不注销用户的情况下更新声明
问题描述
使用ASP.NET Core 3.1
and OpenIDConnect
,我能够进行身份验证,并且在流程中,我添加了用户声明,例如授予对资源访问权限的用户角色。
如果我在运行时更改用户“角色”,我不希望用户退出,而是希望强制刷新令牌,并拥有新的声明/角色。
目前我正在使用它options.Events.OnTokenValidated = async context => { /* add claims if authenticated */}
来最初添加声明。
我添加了中间件来检测用户是否有新的“角色”,并希望强制事件再次触发。
处理这个问题的正确方法是什么?
解决方案
您可以在每次刷新访问令牌时更新它的内容,并且可以通过将 UpdateAccessTokenClaimsOnRefresh 标志设置为 true 来启用它。请参阅此处的文档。
问题是在数据库更改和访问令牌刷新之间您可以接受多少“滞后”。
如果要在客户端更新用户,则必须使用 AddCookie 处理程序中的事件之一。AddOpenIDConnect 处理程序仅在用户最初登录时参与。之后,AddCookie 负责并拥有用户对象 (ClaimsPrincipal)。
推荐阅读
- ruby-on-rails - Rails:使用 RestClient 的外部 API 集成(未定义的局部变量或方法“用户”)
- google-sheets - 如何在 SUM() 之前应用公式?
- arrays - 将 postgresql jsonb 值转换为 int 数组并从中删除元素
- javascript - 动态添加行并运行脚本
- python - python3.6和python3.7的导入差异
- xamarin - BarTintColor 不适用于 Xamarin 的 iOS 13 中的 PrefersLargeTitles
- rest - 保护一个应用程序使用的公共 REST API
- github - 创建 git pre-receive 挂钩以将 git 提交与 jira id 链接
- listview - Flutter ListView 不断执行future函数
- reactjs - 不知道如何根据 URL 中的国家/地区显示列表下拉选项