我们最近在Identity.AspNetUsers
表中通过“活动”布尔字段实现了禁用应用程序中用户的功能。只需使用隐式流程即可轻松地登录后台系统(Angular应用程序)-只需在调用PasswordSignInAsync
之前检查字段即可。
我们无法找到一种方法来阻止使用调用内置ID Server 4端点/connect/token
的姐妹应用程序(用Flutter编写)停止为任何移动设备发行令牌。同样,我们不能阻止应用程序请求然后接收有效的刷新令牌。我们无法硬删除用户,因为我们具有到数据库中其他表的硬链接以进行审核。
任何帮助将不胜感激。
我们正在使用DotNET Core 3,1。
编辑:我们正在使用密码授予类型。
答案 0 :(得分:1)
当客户端使用刷新令牌请求新的访问令牌时,将涉及RefreshTokenService。通过自定义刷新令牌行为,您可以查找是否禁用了用户,然后拒绝发出新的访问令牌。有关如何执行此操作的更多详细信息,请参见此page。
或者,您可以在实现IPersistedGrantStore的类中为禁用用户添加一些代码以进行查找,然后返回
return Task.FromResult<PersistedGrant>(null!);
被阻止时。
答案 1 :(得分:1)
在内置/connect/token
端点中使用密码授予功能时,请实现接口ICustomTokenRequestValidator
并将其作为Transient添加到服务集合中。这有一种方法ValidateAsync
,如果您的请求所引用的用户有效,您只需return
,然后管道会照常继续。如果您的用户无效,则将Result.IsError
的{{1}}属性设置为true,并在返回之前将字符串提供给CustomTokenRequestValidationContext
,这样就不会发行令牌。
注入Result.Error
和UserManager<T>
,以便您可以从该方法访问用户名和用户存储。
这是一个实现:
IHttpContextAccessor