将用户设置为非活动状态

时间:2020-07-29 15:17:10

标签: .net-core identityserver4 openid-connect

我们最近在Identity.AspNetUsers表中通过“活动”布尔字段实现了禁用应用程序中用户的功能。只需使用隐式流程即可轻松地登录后台系统(Angular应用程序)-只需在调用PasswordSignInAsync之前检查字段即可。

我们无法找到一种方法来阻止使用调用内置ID Server 4端点/connect/token的姐妹应用程序(用Flutter编写)停止为任何移动设备发行令牌。同样,我们不能阻止应用程序请求然后接收有效的刷新令牌。我们无法硬删除用户,因为我们具有到数据库中其他表的硬链接以进行审核。

任何帮助将不胜感激。

我们正在使用DotNET Core 3,1。

编辑:我们正在使用密码授予类型。

2 个答案:

答案 0 :(得分:1)

当客户端使用刷新令牌请求新的访问令牌时,将涉及RefreshTokenService。通过自定义刷新令牌行为,您可以查找是否禁用了用户,然后拒绝发出新的访问令牌。有关如何执行此操作的更多详细信息,请参见此page

或者,您可以在实现IPersistedGrantStore的类中为禁用用户添加一些代码以进行查找,然后返回

return Task.FromResult<PersistedGrant>(null!);

被阻止时。

答案 1 :(得分:1)

在内置/connect/token端点中使用密码授予功能时,请实现接口ICustomTokenRequestValidator并将其作为Transient添加到服务集合中。这有一种方法ValidateAsync,如果您的请求所引用的用户有效,您只需return,然后管道会照常继续。如果您的用户无效,则将Result.IsError的{​​{1}}属性设置为true,并在返回之前将字符串提供给CustomTokenRequestValidationContext,这样就不会发行令牌。

注入Result.ErrorUserManager<T>,以便您可以从该方法访问用户名和用户存储。

这是一个实现:

IHttpContextAccessor