当前位置: 首页 > 知识库问答 >
问题:

Spring安全。如何注销用户(撤销oauth2令牌)

温嘉赐
2023-03-14

当我想要注销时,我调用以下代码:

request.getSession().invalidate();
SecurityContextHolder.getContext().setAuthentication(null);

怎么修?

共有1个答案

郑俊彦
2023-03-14

下面是我的实现(Spring OAuth2):

@Controller
public class OAuthController {
    @Autowired
    private TokenStore tokenStore;

    @RequestMapping(value = "/oauth/revoke-token", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public void logout(HttpServletRequest request) {
        String authHeader = request.getHeader("Authorization");
        if (authHeader != null) {
            String tokenValue = authHeader.replace("Bearer", "").trim();
            OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
            tokenStore.removeAccessToken(accessToken);
        }
    }
}

用于测试:

curl -X GET -H "Authorization: Bearer $TOKEN" http://localhost:8080/backend/oauth/revoke-token
 类似资料:
  • 问题内容: 我正在考虑为我的应用程序使用OAuth2。我尝试实现的体系结构如下: 我将拥有自己的(仅此)授权服务器 一些资源应用程序使用授权服务器验证对资源的访问 某些客户端应用程序(网络,移动设备)会将用户重定向到授权服务器进行身份验证,如果成功,则会在资源应用程序上使用api。 到目前为止,我已经成功实现了3个基本应用程序(1个身份验证服务器,1个资源服务器和1个客户端)之间的交互。我无法正常

  • 正如这里提到的http://projects.spring.io/spring-security-oauth/docs/oauth2.html,撤销是通过刷新令牌完成的。但这似乎不起作用。

  • 4.2.4注销处理 logout元素通过导航到特定URL添加了对注销的支持。默认的注销URL是/logout,但是您可以使用logout-url属性将其设置为其他内容。有关其他可用属性的更多信息可以在命名空间附录中找到。 但是,在遵循文档中的安全设置后,URL/logout不会显示注销页面。相反,它显示 Spring Framework 4.1.6 Spring Security 4.0.0 we

  • 我正在使用Laravel Passport,并且在控制器中具有注销功能。见下文: 我现在试图为此编写一个单元测试,但是即使在注销和令牌被撤销后,用户仍然保持登录状态。我发现此方法照明\Auth\ResestGuard::注销不存在Laravel Passport,但即使此解决方案也不适用于我。我猜这可能是因为我正在使用Laravel 8。我的单元测试是这样的: 结果如下: 预期状态代码401,但收

  • 我有一个Spring Boot REST应用程序,它分为资源服务器和Auth服务器--受无状态Oauth2安全性保护。 一切工作正常,我可以获得一个访问令牌,并使用它从我的资源服务器获得受保护的资源: 但是,我不知道如何处理注销(一旦用户决定注销,就使令牌无效)。我假设会提供一些endpoint来使令牌无效,或者我必须创建自己的endpoint来处理它?我不需要指定任何类型的令牌存储beans,所