我在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!!!!!!!!");
}}
`
答案 0 :(得分:0)
我看到你正在使用Authorization标头,我认为令牌是JWT。没有删除或撤销JWT的概念。它必须自己到期。当服务器无法撤销令牌并且无法用于企业应用程序时,有些观点会指出这是一个劣势。
当客户端在另一个API中使用相同的令牌并且服务器分析令牌时,如果它在到期时间内且未被篡改,则它将被验证为TRUE。
然而情况会有所不同,如果您不使用JWT,答案将无关紧要。