首页 > 解决方案 > ASP.NET Core 3.1 OpenIDConnect,如何在不注销用户的情况下更新声明

问题描述

使用ASP.NET Core 3.1and OpenIDConnect,我能够进行身份验证,并且在流程中,我添加了用户声明,例如授予对资源访问权限的用户角色。

如果我在运行时更改用户“角色”,我不希望用户退出,而是希望强制刷新令牌,并拥有新的声明/角色。

目前我正在使用它options.Events.OnTokenValidated = async context => { /* add claims if authenticated */}来最初添加声明。

我添加了中间件来检测用户是否有新的“角色”,并希望强制事件再次触发。

处理这个问题的正确方法是什么?

标签: asp.net-coreopenid-connect

解决方案


您可以在每次刷新访问令牌时更新它的内容,并且可以通过将 UpdateAccessTokenClaimsOnRefresh 标志设置为 true 来启用它。请参阅此处的文档。

问题是在数据库更改和访问令牌刷新之间您可以接受多少“滞后”。

如果要在客户端更新用户,则必须使用 AddCookie 处理程序中的事件之一。AddOpenIDConnect 处理程序仅在用户最初登录时参与。之后,AddCookie 负责并拥有用户对象 (ClaimsPrincipal)。


推荐阅读