Spring boot 后端springboot中的jwt验证

Spring boot 后端springboot中的jwt验证,spring-boot,jwt,Spring Boot,Jwt,我希望创建一个angular应用程序,该应用程序登录springboot中创建的新身份验证服务器并返回jwt 其思想是创建应用程序,以便能够基于屏幕中提供的用户/密码生成jwt令牌并使用私钥对其进行签名,身份验证服务器将验证数据库中的登录信息并生成jwt令牌 之后,一个请求将被发送到另一个微服务,在这里,我需要能够验证令牌,但是这个微服务不会以任何方式连接到身份验证服务或数据库,它只会使用公钥验证令牌的完整性 我到处寻找,没有找到能够验证令牌的线索,我找到了这段代码,但由于某种原因,当我执行re

我希望创建一个angular应用程序,该应用程序登录springboot中创建的新身份验证服务器并返回jwt

其思想是创建应用程序,以便能够基于屏幕中提供的用户/密码生成jwt令牌并使用私钥对其进行签名,身份验证服务器将验证数据库中的登录信息并生成jwt令牌

之后,一个请求将被发送到另一个微服务,在这里,我需要能够验证令牌,但是这个微服务不会以任何方式连接到身份验证服务或数据库,它只会使用公钥验证令牌的完整性

我到处寻找,没有找到能够验证令牌的线索,我找到了这段代码,但由于某种原因,当我执行rest API时,没有执行这段代码:

@Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();


        Resource resource = new ClassPathResource("public.txt");
        String publicKey = null;

        try {
            publicKey = IOUtils.toString(resource.getInputStream(), Charset.defaultCharset());
        } catch (final IOException e) {
            throw new RuntimeException(e);
        }
        converter.setVerifierKey(publicKey);
        return converter;
    }
我想做的有意义吗

谢谢
关于

您的身份验证服务器将需要是微服务的JWT的单一颁发者。因此,当用户登录并成功进行身份验证时,您的身份验证服务器将发出使用私钥签名的JWT(签名必须是非对称的-RS256是一个示例),您只保留在身份验证服务器上;不要将此私钥提供给您希望在其中验证JWT的其他微服务。您可以做的是基于您用其签名令牌的私钥派生公钥,并将其发布到auth服务器上不需要身份验证的端点-公钥将以JWK()的形式表示。谷歌也做了类似的事情。然后,在每个微服务中,您需要设计一种方法,每X分钟向auth服务器上的公钥端点发出GET请求,并在每个微服务中缓存公钥

然后,每当一个请求进入一个微服务时,您就获取JWT,检查其有效性,并在令牌有效时授予访问/授权。使用私钥/公钥对和非对称密钥签名的好处在于,您可以仅基于公钥验证令牌,但不能对其进行签名。因此,只要每个服务都有来自/cert端点的公钥,它们就可以验证令牌,而无需与身份验证服务器通信或知道私钥

这将需要更多的前期工作,但将为您带来大量的方便、灵活性和安心,因为只有一个来源知道您的私钥

我建议使用进行JWT验证

整个体系结构最终将看起来像这样: