如何注销通过Gocloak LoginAdmin创建的管理员会话?
管理员会话注销方法
你可以用以下两种方式注销管理员登录产生的会话,不需要额外的clientsecret:
1. 用Refresh Token撤销当前会话
利用登录时拿到的refresh_token,调用RevokeToken方法就能直接结束当前会话:
// 用登录返回的token里的RefreshToken注销会话 err := client.RevokeToken(ctx, token.RefreshToken, realm, "", "") if err != nil { log.Error("撤销令牌失败: ", err.Error()) return }
这里最后两个空字符串对应clientID和clientSecret,管理员通过LoginAdmin获取的令牌不需要这两个参数,直接留空即可。
2. 注销该管理员的所有活跃会话
如果需要一次性注销这个管理员的所有在线会话,可先获取用户ID,再调用LogoutUserSessions方法:
// 先根据用户名获取当前管理员的用户ID user, err := client.GetUserByUsername(ctx, token.AccessToken, realm, username) if err != nil { log.Error("获取用户信息失败: ", err.Error()) return } // 注销该用户的所有会话 err = client.LogoutUserSessions(ctx, token.AccessToken, realm, user.ID) if err != nil { log.Error("注销用户所有会话失败: ", err.Error()) return }
这个方法依赖管理员的access token(需要用户拥有manage-users类的权限),同样不需要clientsecret。
注意点
- 要确保管理员账号有管理用户会话的权限,不然调用
LogoutUserSessions会报错。 RevokeToken调用后,对应的refresh token会失效,无法再用它获取新的access token,当前会话直接终止。
内容的提问来源于stack exchange,提问作者nltbo
相关产品推荐
相关产品推荐

