在Spring Cloud Gateway中创建JWT黑名单

问题描述 投票:2回答:1

我将spring云网关与oauth2登录集成在一起,在scg中注销后,由于用户的有效token,用户仍然可以访问资源服务器。在scg中注销后,用户仍然可以访问资源服务器,因为用户有有效的token。我需要以某种方式使这个有效的token无效。我的研究中有黑名单的解决方案(https:/stackoverflow.coma539949385079581。),我将实现这个功能。

通过创建过滤器,我在 "注销 "步骤中提取jwt,并将其放入黑名单。

public class ExampleWebFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
        ServerHttpRequest request = serverWebExchange.getRequest();
        String uri = request.getPath().pathWithinApplication().value();
        HttpHeaders headers = request.getHeaders();
        if(uri.equals("/logout")) {
            List<String> auth = headers.get("Authorization");
        }

        return webFilterChain.filter(serverWebExchange);
    }

}

我想我的过滤器在token中继过滤器之前就已经开始工作了。 我如何在网关上访问jwt? 有什么代码示例或演示吗?谢谢。

jwt spring-oauth2 jwt-auth spring-cloud-gateway blacklist
1个回答
0
投票

在spring云网关+安全oauth2集成中,JWTs以session的形式存储在网关中。起初,我以为将JWT保存为session会出现错误,因为它变成了有状态的。但是,当你注销的时候,这个session被删除了,没有JWT了,因此 不需要建立黑名单.这种工作方式是一种聪明的解决方法。

那么,我的问题是什么呢?我有2个独立的服务器(网关,oauth2服务器)。......操作的结果是创建了两个会话。SESSION代表网关,JSESSION代表oauth2服务器。 当你在网关处注销时。只有SESSION被删除了,但JSESSION还活着。 因此,网关去oauth服务器(仍然在oauth2服务器上登录)并获得新的JWT。

要完全退出系统。你也需要从ouath2服务器上注销。 同时。

© www.soinside.com 2019 - 2024. All rights reserved.