后端springboot中的jwt验证

时间:2019-03-14 13:13:22

标签: spring-boot jwt

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

这个想法是创建一个应用程序,以便能够根据屏幕上提供的用户/密码使用私钥生成并签名jwt令牌,认证服务器将验证数据库中的登录信息并生成jwt令牌

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

我四处张望,找不到能够验证令牌的线索,我找到了这段代码,但是由于某些原因,当我执行其余的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;
    }

我试图做的事有意义吗?

谢谢 问候

1 个答案:

答案 0 :(得分:0)

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

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

这将需要做更多的事,但是将来,只有一个来源知道您的私钥,您才能获得大量的轻松,灵活和安心。

我建议使用here进行JWT验证。

整体架构最终看起来像这样: this library