Gav*_*and 5 access-token openid-connect identityserver4
是否有推荐的方法来撤销Identity Server 4中其他用户的访问权限?我正在查看的用例是管理员撤销当前登录用户的系统访问权限.
我已经阅读了Revocation Endpoint的文档,可以看到用户如何使用它来撤销自己的访问权限.但是,如果管理员不知道特定用户的访问令牌是什么,怎么办?
对于End Session Endpoint我也是如此,管理员将如何知道他们的ID令牌?
到目前为止我所尝试的是实现IProfileService并检查用户的帐户在该IsActiveAsync方法中是否有效.在我们的客户数据库中,我可以停用他们的帐户,这具有将他们重定向到登录页面的预期效果.但令牌和会话仍然"活着".这是结束会话和撤销访问令牌的好地方吗?
或者是将用户令牌持久化到数据库中的选项?
更新
基于从@Mashton回答下面我发现如何在Identity Server文档实现持久性的例子在这里.
创建此处描述的数据迁移将[dbo].[PersistedGrants]在Key列中保留令牌.起初我很困惑,因为他们看起来不像我的参考访问令牌,但经过一点挖掘后我发现它们被存储为SHA-256哈希.查看Identity Server的GitHub中的DefaultGrantStore实现,Hashed Key计算如下...
const string KeySeparator = ":";
protected string GetHashedKey(string value)
{
return (value + KeySeparator + _grantType).Sha256();
}
Run Code Online (Sandbox Code Playgroud)
... value这是令牌,而且_grantType是以下之一......
public static class PersistedGrantTypes
{
public const string AuthorizationCode = "authorization_code";
public const string ReferenceToken = "reference_token";
public const string RefreshToken = "refresh_token";
public const string UserConsent = "user_consent";
}
Run Code Online (Sandbox Code Playgroud)
使用持久化授权不会给我原始的访问令牌,但它允许我能够撤销访问令牌,因为[dbo].[PersistedGrants]表具有SubjectId.
更新2 - Identity Server不断创建令牌
我创建了一个隐式的mvc客户端,在成功登录后,我在屏幕上删除了声明.我从持久授权db中删除访问令牌,然后使用Postman在End Session Endpoint中结束会话(使用声明中的id令牌).当我刷新浏览器时,我希望用户被重定向到登录屏幕,而是获得新的访问令牌和新的ID令牌.的Client.IdentityTokenLifetime只有30秒.
我在这里缺少什么想法?
您只能撤销Reference tokens不JWTs和是那些需要存储在数据库中.看看IPersistedGrantStore(我的头顶,所以可能有错误的名字),你会看到结构非常简单.
一旦你将它们存储起来,你显然可以做任何你喜欢管理的事情,比如改变过期或者直接删除它们.
| 归档时间: |
|
| 查看次数: |
1826 次 |
| 最近记录: |