猿问

使用 Web API 的 JWT 自省中间件 - Java 和 Identity Server

我目前正在使用基于 .Net Core 的 Identity Server 4 来颁发 JWT 令牌。我有一个具有中间件的 .Net Core Web API,以便在以下位置验证 JWT:Startup.cs


services.AddAuthentication("Bearer")

                .AddJwtBearer("Bearer", options =>

                {

                    options.Authority = "http://localhost:5005";

                    options.Audience = "api1";

                });

正如我们所看到的,除了令牌服务器的位置和 api 是谁(即 'api1)之外,它并没有要求太多。显然,它在引擎盖下做了一些更复杂的事情。


我找到了一个基于Java的等效于上面的中间件,它验证了一个JWT:


String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCJ9.AbIJTDMFc7yUa5MhvcP03nJPyCPzZtQcGEp-zWfOkEE";

RSAPublicKey publicKey = //Get the key instance

RSAPrivateKey privateKey = //Get the key instance

try {

    Algorithm algorithm = Algorithm.RSA256(publicKey, privateKey);

    JWTVerifier verifier = JWT.require(algorithm)

        .withIssuer("auth0")

        .build(); //Reusable verifier instance

    DecodedJWT jwt = verifier.verify(token);

} catch (JWTVerificationException exception){

    //Invalid signature/claims

}

这是来自网站推荐的 这里.jwt.io


基本上,我希望能够在 Java 中实现与上面的 .Net Core 代码相同的功能,但它显然需要诸如 a 和 key 之类的东西,我不知道此时如何提供,因为 JWT 是通过请求的标头。PublicPrivate


慕婉清6462132
浏览 102回答 1
1回答

慕的地6264312

在后台,Microsoft JWT 中间件将进入 IdentityServer 的发现端点,并加载到颁发者和 JWKS(公钥)等配置中。发现文档始终托管在 上。/.well-known/openid-configuration要验证令牌,您至少需要来自 JWKS 的公钥。过去,我使用 jwks-rsa 库加载了它: https://www.scottbrady91.com/Kotlin/JSON-Web-Token-Verification-in-Ktor-using-Kotlin-and-Java-JWT验证访问令牌时,至少还需要检查令牌的受众(令牌是否适用于你)以及它是否已过期。
随时随地看视频慕课网APP

相关分类

Java
我要回答