logto browser sdk 是平台无关的sdk,可以使用 logto browser sdk 来进行用户登陆。 获取 token, 如果 token 过期了,他们会去尝试使用 refresh token 来获取到最新的 token 来进行登陆。 那么我们将面临两个问题,
- refresh token 如果没有过期的话,访问 oidc/token 来得到新 token
- 如果 refresh token 过期了的话,得到 400 是这样的吗?
如何获取最新的token,通过 /oidc/.well-known/openid-config 去得到 token_endpoint 的地址,拿 token_endpoint 去访问后台,应该落入 /oidc/token 之中。
找一下 logto 的后台源码。logto core 使用 koa 作为 web 框架,写的比较灵活。
- routes 文件夹里面都是对外 api 的实现。
- libraries 是如 logto browser sdk 的替代实现 在 packages/core/src/libraries/cloud-connection.test.ts:40,37。
- tenant 是核心挂载 koa 路由的文件
我想知道 /oidc/token 如何挂载在路由上,和它的处理方式是怎样的?
在 logto 挂载路由的位置
// Mount OIDC
const provider = initOidc(envSet, queries, libraries);
app.use(mount('/oidc', provider.app));
oidc-provider 是 oidc 的 node 标准实现, 通过 koa 组合进 logto。 以下是关键位置。
addOidcEventListeners(oidc, queries);
registerGrants(oidc, envSet, queries);
- 单纯javascript写成的,写法上灵活自由。
附录:
- koa-body 可以扩展 koa 的解析能力。处理多种不同的body。