在使用 Keycloak 进行认证的前端网站中,公钥是用来验证 token 的重要一环,但是每次都向 Keycloak 发送请求获取公钥会对后端服务器造成很大的负担。此时,我们可以使用 npm 包 "get-keycloak-public-key-with-agent" 来缓存公钥并减轻后端服务器负担。
什么是 "get-keycloak-public-key-with-agent" 包
"get-keycloak-public-key-with-agent" 是一个使用 Node.js 编写的 npm 包,可用于从 Keycloak 获取公钥,并在本地进行缓存。它使用了一种代理模式,当第一次请求公钥时,它会从 Keycloak 获取,并在本地进行缓存。当之后再次请求时,它会返回本地缓存的公钥。由于缓存是在内存中进行的,因此它可以快速地响应请求。
如何使用 "get-keycloak-public-key-with-agent" 包
安装
要使用 "get-keycloak-public-key-with-agent" 包,首先需要将其安装到项目中。通过 npm 或 yarn 安装:
npm install get-keycloak-public-key-with-agent # 或者 yarn add get-keycloak-public-key-with-agent
导入并使用
导入 "get-keycloak-public-key-with-agent" 包:
const KeycloakPublicKeyAgent = require('get-keycloak-public-key-with-agent');
初始化并从 Keycloak 获取公钥:
const realmUrl = 'http://keycloak.example.com/auth/realms/myrealm'; const clientId = 'myclient'; const agent = new KeycloakPublicKeyAgent(realmUrl, clientId); const publicKey = await agent.getPublicKey();
在第一次调用 getPublicKey
时,将会从 Keycloak 获取公钥,并在本地进行缓存。之后的调用会返回本地缓存的公钥。
示例代码
下面是一段使用 "get-keycloak-public-key-with-agent" 包的示例代码,首先创建一个 express 应用,然后使用 express-jwt
中间件来验证 JWT。使用 "get-keycloak-public-key-with-agent" 包来获取公钥,并将其传递给 express-jwt
中间件使用:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ----------------------- ----- ---------------------- - ---------------------------------------------- ----- --- - ---------- -- --- ---------------------- ----- -------- - -------------------------------------------------- ----- -------- - ----------- ----- ----- - --- -------------------------------- ---------- -- -- --- ------------- ------- ----- -------- -------- ----- -- - ----- --------- - ----- --------------------- ---------- ----------- -- ----------- --------- ---- -- ---- ------------------------- ----- ---- -- - -------------- -- - --------- ------------ --- -----------------
结论
"get-keycloak-public-key-with-agent" 包可以为使用 Keycloak 进行认证的前端应用增加性能,减轻后端服务器负担。通过使用该包,我们可以缓存公钥,并快速响应请求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005725881e8991b448e876a