Oauth 2.0 如何在Oauth2.0中撤销访问和刷新令牌?

Oauth 2.0 如何在Oauth2.0中撤销访问和刷新令牌?,oauth-2.0,identityserver4,Oauth 2.0,Identityserver4,我已使用此方法撤销令牌。但是访问令牌和刷新令牌仍然是可重用的。如何撤销访问和刷新令牌 public async Task<IActionResult> Revoke(string refreshToken,stringaccessToken){ var identityService = await DiscoveryClient.GetAsync("http://localhost:5000"); var revocationClient = n

我已使用此方法撤销令牌。但是访问令牌和刷新令牌仍然是可重用的。如何撤销访问和刷新令牌

public async Task<IActionResult> Revoke(string 
   refreshToken,stringaccessToken){
    var identityService = await 
    DiscoveryClient.GetAsync("http://localhost:5000");

    var revocationClient = new 
    TokenRevocationClient(identityService.RevocationEndpoint, "ro.client", 
    "secret"); 
    var response = await 
    revocationClient.RevokeRefreshTokenAsync(refreshToken); 
               var response1 = await 
    revocationClient.RevokeAccessTokenAsync(accessToken);
}
公共异步任务撤销(字符串
refreshToken,stringaccessToken){
var identityService=等待
DiscoveryClient.GetAsync(“http://localhost:5000");
var revocationClient=new
TokenRevocationClient(identityService.RevocationEndpoint,“ro.client”,
“秘密”);
var响应=等待
revocationClient.RevokeRefreshTokenAsync(refreshToken);
var response1=等待
revocationClient.RevokeAccessTokenAsync(accessToken);
}

只有引用和刷新令牌可以通过这种方式撤销。JWT在其exp时间之前有效,除非您在消费者中构建附加逻辑。

我的公司提供管理投资银行资产的软件,使用以下分离:

API凭据

  • 访问令牌用于从UI调用API
  • 它们的寿命只有30分钟
  • 它们是JWT,不需要撤销,因为它们是短期的
用户会话

  • 这些由刷新令牌表示
  • UI的刷新令牌可能持续8小时
  • 访问令牌每30分钟过期一次,并以静默方式续订
  • 刷新令牌存储在数据库中
  • IT管理员可以通过从数据库中删除刷新令牌来撤销刷新令牌
  • 这将在不超过30分钟后强制重新登录
撤销流程

  • 通常,IT管理员在撤销刷新令牌(如应用程序Id、用户Id和发出的时间)时会希望使用上下文

  • 因此,如果您要提供用于撤销的UI,您可能需要提供上述字段


刷新令牌仅用于桌面/移动应用程序或服务器端web应用程序

对于真正的浏览器应用程序(单页应用程序),您不能使用刷新令牌。不过,您仍然可以将API凭据时间与用户会话时间分开

我的博客上有一些关于会话的注释,以防它们有所帮助:

  • 我不介绍服务器端web应用,但基本上它们在身份验证cookie中携带刷新令牌


您使用的是参考代币还是JWT?撤销只对前一个有效我用JWT代币撤销谢谢Mackie。现在我将JWT令牌更改为引用令牌。配置文件和启动文件中有哪些更改?你能帮助我吗?或者发送了任何引用链接?我不想成为RTFM的人,但这里有解释:您的API需要能够调用内省端点来验证所述引用令牌,因此您需要确保它们定义了一个秘密,并且中间件配置适当。如何手动使Jwt令牌过期?可能吗?Gary,你用的是什么类型的UI?浏览器或某种桌面或移动应用程序?