Auth0快取SDK是一个用于在快取应用程序中执行用户认证的库.
文档
特征
直接跳到所需的能力.
| 特性 | 它会做什么 |
|---|---|
| 快开始 | 注册 Auth0 插件 fastify.register 数行 |
| 内建路线 | /auth/login, (中文(简体) ), /auth/logout, (中文(简体) ), /auth/callback后通道登录 |
| 自定义登录/ 登录/ 回调 | 滚出自己的路线,而不是挂起的路线 |
| 配置挂载路线 | 禁用内置路由或添加账户链接路由 |
| 用会话保护路径 | 登录会话后面的门服务器已发送页面 |
| 获取当前会话/ 用户 | 使用 getUser() 编号 : getSession() |
调用 API (E)getAccessToken(中文(简体) ) | 获取访问令牌, 将 API 调用为用户 |
| 密码 | 签名用户并登录密码、电子邮件和电话核对码 |
| 自定义托肯交换 | 在没有浏览器登录的情况下从外部符号创建会话 |
| 通过会话传输进行假冒 | 将代理人作为客户登录到另一个应用程序,通过 act 索赔 |
| 多个自定义域( MCD) | 每个请求解决 Auth0 域 |
自定义 fetch | 在自己获取中交换( 代理、 重试、 仪器) |
| 发现缓存 | 控制隐藏 OIDC 发现元数据和 JWKS |
开始
1. 安装SDK
npm i @auth0/auth0-fastify
这个库需要Node.js 20 LTS和较新的LTS版本.
2. 注册 Auth0 快捷插件
以快捷实例注册 Auth0 套接字 .
import auth0 from '@auth0/auth0-fastify';
fastify.register(auth0, {
domain: '<AUTH0_DOMAIN>',
clientId: '<AUTH0_CLIENT_ID>',
clientSecret: '<AUTH0_CLIENT_SECRET>',
appBaseUrl: '<APP_BASE_URL>',
sessionSecret: '<SESSION_SECRET>'
});
这个 AUTH0_DOMAIN, (中文(简体) ), AUTH0_CLIENT_ID,以及 AUTH0_CLIENT_SECRET 可从 Auth0 剪贴板 一旦你创建了一个应用程序. 此申请必须是 Regular Web Application。 。 。 .
这个 SESSION_SECRET 是用于加密会话 cookie 的密钥。 您可以使用 openssl数字 :
openssl rand -hex 64
这个 APP_BASE_URL 您的应用程序正在运行的 URL 。 本地开发时,这种情况最为常见 http://localhost:3000。 。 。 .
[大
您需要在 Auth0 应用程序中通过 Auth0 剪贴板数字 :
- 添加
http://localhost:3000/auth/callback名单 允许召回 URL- 添加
http://localhost:3000名单 允许登录 URL
路线
用于快速化网络应用的 SDK 搭载了4条主要路线:
/auth/login: 用户将被重定向启动认证交易的登录路径. 支持添加一个returnTo登录后返回特定 URL 的查询字符串参数 。 它还转发asession_transfer_token向 Auth0 查询字符串参数organization当该参数伴有STT时,此路由将双倍作为赎回端点 通过会话传输进行假冒。 。 。 ./auth/logout: 必须添加到您的 Auth0 应用程序允许的日志 URL 的日志路径/auth/callback: 必须在 Auth0 应用程序允许的回调 URL 中添加的回调路由/auth/backchannel-logout: 将接收到一个logout_token配置时 后通道登录 启动发生
要禁用此行为, 您可以设置 mountRoutes 选项到 false (默认情况属实):
fastify.register(auth0, {
mountRoutes: false
});
此外,通过设置 mountConnectRoutes 改为 true (默认是虚假的) SDK也可以挂载4条用于账户链接的路径:
/auth/connect: 用户将重新定向以启动账户链接的路由/auth/connect/callback: 账户连接的回调路由, 该路由必须添加到您的 Auth0 应用程序的允许回调 URL/auth/unconnect: 用户将重新定向以启动账户链接的路由/auth/unconnect/callback: 账户连接的回调路由, 该路由必须添加到您的 Auth0 应用程序的允许回调 URL
[大
何时mountRoutes设置为false设置mountConnectRoutes没有效果.
3. 添加登录和停用
当使用内置挂载路由时,用户可以被重定向到 /auth/login 启动登录流程,并 /auth/logout 以登录.
<a href="/auth/logout">Log out</a>
<a href="/auth/login">Log in</a
>
在不使用内置路线时,您要给SDK打电话 startInteractiveLogin(), (中文(简体) ), completeInteractiveLogin() 财务报告和审定财务报表 logout() 方法:
fastify.get('/custom/login', async (request, reply) => {
const authorizationUrl = await fastify.auth0Client.startInteractiveLogin(
{
authorizationParams: {
// Custom URL to redirect back to after login to handle the callback.
// Make sure to configure the URL in the Auth0 Dashboard as an Allowed Callback URL.
redirect_uri: 'http://localhost:3000/custom/callback',
}
},
{ request, reply }
);
reply.redirect(authorizationUrl.href);
});
fastify.get('/custom/callback', async (request, reply) => {
await fastify.auth0Client.completeInteractiveLogin(
new URL(request.url, options.appBaseUrl),
{ request, reply }
);
reply.redirect('https://localhost:3000');
});
fastify.get('/custom/logout', async (request, reply) => {
const logoutUrl = await auth0Client.logout({ returnTo: 'https://localhost:3000' }, { request, reply });
reply.redirect(logoutUrl.href);
});
4. 保护路线
为了保护快取路线,您可以使用 SDK 的 getSession() 自定义前汉德勒中的方法 :
async function hasSessionPreHandler(request: FastifyRequest, reply: FastifyReply) {
const session = await fastify.auth0Client!.getSession({ request, reply });
if (!session) {
reply.redirect('/auth/login');
}
}
fastify.get(
'/profile',
{
preHandler: hasSessionPreHandler,
},
async (request, reply) => {
const user = await fastify.auth0Client!.getUser({ request, reply });
return reply.viewAsync('profile.ejs', {
name: user!.name,
});
}
);
[大
以上是通过会话保护服务器侧渲染路由,而不是使用无记名符号的API路由.
请求访问托肯呼叫 API
如果您需要代表用户调用 API, 请指定 audience 参数用于注册插件。 这将使SDK在用户登录时为指定的受众请求访问令牌.
fastify.register(fastifyAuth0, {
domain: '<AUTH0_DOMAIN>',
clientId: '<AUTH0_CLIENT_ID>',
clientSecret: '<AUTH0_CLIENT_SECRET>',
audience: '<AUTH0_AUDIENCE>',
appBaseUrl: '<APP_BASE_URL>',
sessionSecret: '<SESSION_SECRET>',
});
这个 AUTH0_AUDIENCE 是您要调用的 API 的标识符。 您可以在 Auth0 仪表板的 API 部分中找到这个 .
通过使用 getAccessToken数字 :
const accessTokenResult = await fastify.auth0Client.getAccessToken({ request, reply });
console.log(accessTokenResult.accessToken);
反馈
捐款
我们赞赏反馈和对这次再投资的贡献! 在开始前,请阅读以下内容:
提出问题
请提供反馈或报告错误 提出我们的问题追踪器。 。 。 .
脆弱性报告
请不要在公共 GitHub 问题跟踪器上报告安全漏洞 。 这个 负责任的披露程序 详细说明披露安全问题的程序.
什么是奥特?
Auth0是一个易于执行,可适应的认证和授权平台. 学习更多退房 为什么是Auth0?
这个项目根据麻省理工学院的许可证获得许可。 见 自由主义 需要更多信息的文件.