angularjs - Spring Oauth2 SSO - 无法从 Auth 服务器注销

标签 angularjs spring spring-security oauth-2.0 spring-security-oauth2

我正在使用 @EnableOauth2Sso,其架构类似于 Spring 的 oauth2 tutorial 中描述的架构。 : 一个授权服务器,一个启用 sso 的 zuul 代理,一个独立的 UI 应用程序等。

Auth server   ----  Resource Server (Zuul app) ---- Angular UI App

问题是,当 UI 从资源服务器注销时,它成功删除了资源服务器 JSESSIONID,然后用户被重定向到主页。当用户想要再次登录时,他会被重定向到 auth 服务器,但不会要求用户输入密码,而是认为他仍然登录。身份验证服务器 JSESSIONID 仍然存在,并且不受之前资源服务器注销的影响。

我怎样才能从身份验证服务器注销?

最佳答案

由于没有开箱即用的 Spring OAuth2 单点注销,我们必须解决这个问题,创建一个/revoke 端点,调用 Auth Server 从它注销:

用户界面:

    $http({
        method: 'POST',
        url: API + '/logout'
    }).then(function() {
        $http({
            method: 'GET',
            url: API + '/auth/oauth/session/revoke'
        }).then(function() {
            window.location = '/';
        });
    });

Zuul 服务器:

zuul:
  ...
  routes:
      authServer:
        path: /auth/**
        url: ${authServer.url}/auth/
      ...

授权服务器:

@RestController
public class RevokeController {

    @RequestMapping(value = "/oauth/session/revoke", method = RequestMethod.GET)
    public void revoke(HttpServletRequest request) throws InvalidClientException {
        request.getSession().invalidate();
    }
}

关于angularjs - Spring Oauth2 SSO - 无法从 Auth 服务器注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43374658/

相关文章:

spring - -Dlogback.configurationFile=logback.xml 在运行 Spring-Boot 时被忽略

java - 在 Maven 存储库中找不到 SpringSecurityUser 类

javascript - 使用 Spring Security 为非授权用户隐藏数据表中的按钮

javascript - 无法将对象从 Angular 服务传递到 Controller

jquery - 切换在 Angular ng-repeat 中无法正常工作

java - 有没有一种简单的方法可以在启动时在露天创建用户/组?

java - 如何确保 java 中的注释执行顺序?

java - Spring 3 MVC从 Controller 访问全局变量

angularjs - 使用 REST API 和 JavaScript 前端(例如 Angular)进行模型验证的最佳实践

javascript - 如何从带参数的指令调用 Angular Controller 作用域函数?