我知道如何实现注册用户的路由,以及如何用用户凭据交换访问令牌。两者都包含在官方tutorial中。
如何使注册用户的访问令牌(和刷新令牌)无效。这对于注销和限制用户帐户遭到破坏时的损害都是必要的。
我看到有一种方法
authServer.revokeAllGrantsForResourceOwner(identifier)
但是我仍在研究如何从用户那里获取标识符,因为客户端应用程序知道服务器数据库中的用户名而不是用户ID。只需传递当前令牌并让服务器取消该用户的所有令牌,就很好了。
答案 0 :(得分:1)
如果您想撤销给定令牌的所有令牌,请从授权令牌中获取用户ID,然后对该用户令牌运行删除查询:
(uint64_t)(a * b * d)
并确保您链接授权者:
class TokenManagerController extends ResourceController {
@Operation.delete()
Future<Response> deleteTokens() async {
final userId = request.authorization.ownerID;
final query = Query<ManagedAuthToken>(context)
..where((token) => token.resourceOwner).identifiedBy(userId);
final count = await query.delete();
return Response.ok({"userId": userId, "tokensDeleted": count});
}
}
FWIW,我建议为此操作专门设置一个作用域,该作用域仅通过附加登录为此情况授予。 UX是用户必须再次输入密码。
如果您只想删除一个令牌,只需运行一个删除查询,其中router.route("/tokens")
.link(() => Authorizer.bearer(authServer))
.link(() => TokenManagerController(context));
=授权标头中的令牌。
access_token