我已经用.net core 1.1版本安装了一个IdentityServer4应用程序。我有一个要求,管理员用户可以停用系统中的用户。停用后,这些用户应该无法使用该系统。应该强制它们从所有浏览器和设备上注销。
注意:应用程序配置为使用oAuth和OpenId
处理这种情况的最佳方法是什么?
对于您的需求,最好的选择是切换到具有服务器端验证的引用令牌,如文档中所述。它不是基本的OpenId Connect协议,但它提供了对令牌有效性的服务器端控制。
OpenId Asp.net标识
如果你使用的是你已经标记的Asp.net身份。您可以进入数据库并更改AspNetUsers上的用户SecurityStamp。这将导致用户在下次验证时注销系统。默认情况下,我相信它每三十分钟验证一次,但这是你可以自己配置的。
要锁定它们,您可以将LockoutEnd设置为遥远的将来某个时候。在时间到期之前,被锁定的用户将无法登录。此列也在AspNetUsers表的上。
Oauth2
请记住,锁定用户可能不会影响任何可能已授予用户访问权限的客户端的访问令牌或刷新令牌。因此,对于Oauth,情况会稍微复杂一些。
授予该用户客户端的访问令牌将继续工作,直到它们过期,除非您正在测试该用户是否已被锁定,即使您的api正在验证访问令牌也是如此。因此,如果你想这样做,那么你必须将其添加到你的应用程序/API的验证中。
我认为刷新令牌存储在身份服务器的PersistedGrants表中。这不是我深究的事情,只是一个暗示。旧的刷新令牌可能仍然有效,但我认为您可以在身份服务器中添加一些内容,以确保该用户在返回访问令牌之前没有被锁定。