慕婉清6462132
2023-11-01 21:37:40
我目前正在使用基于 .Net Core 的 Identity Server 4 來(lái)頒發(fā) JWT 令牌。我有一個(gè)具有中間件的 .Net Core Web API,以便在以下位置驗(yàn)證 JWT:Startup.csservices.AddAuthentication("Bearer") .AddJwtBearer("Bearer", options => { options.Authority = "http://localhost:5005"; options.Audience = "api1"; });正如我們所看到的,除了令牌服務(wù)器的位置和 api 是誰(shuí)(即 'api1)之外,它并沒(méi)有要求太多。顯然,它在引擎蓋下做了一些更復(fù)雜的事情。我找到了一個(gè)基于Java的等效于上面的中間件,它驗(yàn)證了一個(gè)JWT:String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCJ9.AbIJTDMFc7yUa5MhvcP03nJPyCPzZtQcGEp-zWfOkEE";RSAPublicKey publicKey = //Get the key instanceRSAPrivateKey privateKey = //Get the key instancetry { 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}這是來(lái)自網(wǎng)站推薦的 這里.jwt.io基本上,我希望能夠在 Java 中實(shí)現(xiàn)與上面的 .Net Core 代碼相同的功能,但它顯然需要諸如 a 和 key 之類(lèi)的東西,我不知道此時(shí)如何提供,因?yàn)?JWT 是通過(guò)請(qǐng)求的標(biāo)頭。PublicPrivate
1 回答

慕的地6264312
TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
在后臺(tái),Microsoft JWT 中間件將進(jìn)入 IdentityServer 的發(fā)現(xiàn)端點(diǎn),并加載到頒發(fā)者和 JWKS(公鑰)等配置中。發(fā)現(xiàn)文檔始終托管在 上。/.well-known/openid-configuration
要驗(yàn)證令牌,您至少需要來(lái)自 JWKS 的公鑰。過(guò)去,我使用 jwks-rsa 庫(kù)加載了它: https://www.scottbrady91.com/Kotlin/JSON-Web-Token-Verification-in-Ktor-using-Kotlin-and-Java-JWT
驗(yàn)證訪問(wèn)令牌時(shí),至少還需要檢查令牌的受眾(令牌是否適用于你)以及它是否已過(guò)期。
添加回答
舉報(bào)
0/150
提交
取消