在Spring Security Oauth2中注销后删除access_token

时间:2016-10-06 07:32:34

标签: spring-security spring-security-oauth2

我在spring security和oauth2

中有注销问题

我们正在使用Spring安全OAuth2保护REST服务。令牌和rest-api端点是无状态的,不需要会话。我需要我的authserver只进行一次登录验证,当我在休息客户端调用注销服务时显示200响应,但没有删除授权。当我输入用户名和密码agin相同的用户应该登录。但不是logouting.i清除了上下文。

这是我的控制器

`@Path("oauth2/logout")
 public class LogoutImpl implements LogoutSuccessHandler{ 
 private TokenStore tokenStore;
 @Autowired
 public LogoutImpl(TokenStore tokenStore) {
     this.tokenStore = tokenStore;
 }
 public void setTokenStore(TokenStore tokenStore) {
  this.tokenStore = tokenStore;
 }
 @Override
 public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse  response, Authentication authentication)
   throws IOException, ServletException {
     removeaccess(request);
    SecurityContextHolder.clearContext();
    response.getOutputStream().write("\n\tYou Have Logged Out successfully.".getBytes());}
public void removeaccess(HttpServletRequest req) {
  String tokens = req.getHeader("Authorization");
 String value = tokens.substring(tokens.indexOf(" ")).trim();
  OAuth2AccessToken token = tokenStore.readAccessToken(value.split(" ")[0]);
  tokenStore.removeAccessToken(token);
  System.out.println("\n\tAccess Token Removed Successfully!!!!!!!!");
 }}
`  

1 个答案:

答案 0 :(得分:0)

我看到你正在使用Authorization标头,我认为令牌是JWT。没有删除或撤销JWT的概念。它必须自己到期。当服务器无法撤销令牌并且无法用于企业应用程序时,有些观点会指出这是一个劣势。

当客户端在另一个API中使用相同的令牌并且服务器分析令牌时,如果它在到期时间内且未被篡改,则它将被验证为TRUE。

然而情况会有所不同,如果您不使用JWT,答案将无关紧要。