1Panel 部署 Logto 对接自有平台

本文首发于 Anyeの小站点击链接 访问体验更佳

前言

应群友需求,写一篇关于如何使用 1Panel 部署 Logto,来实现身份验证和授权的指南。

Logto 是一个开源的身份验证和授权解决方案,支持多种身份验证方式,通过通用 OIDC,可以轻松实现单点登录和多因素认证。

本文将以 Halo 的对接为例,讲讲如何在 1Panel 上部署 Logto 且对接实现身份验证和授权功能。

准备工作

  • 已部署 1Panel 的服务器一台
  • 域名一个
  • Halo (或其他自有支持 OIDC 的平台)
  • 基本语文素养

部署

安装 OpenResty

安装 PostgreSQL

安装 Logto

在 1Panel 面板中打开 应用商店 ,搜索 Logto ,点击安装。

修改 Logto 服务地址Logto 管理控制台地址 ,其余配置保持不变,点击 确认 开始安装。

注意:这里填写的域名必须是后面反代正式使用的域名,且必须启用 HTTPS 。

示例:

反向代理

在 OpenResty 中添加两个 反向代理 站点,参考上图中的地址和端口进行反代。

均需要在站点配置中开启 HTTPS。

示例:

创建账户

进入 Logto 管理控制台,如示例中 https://admin-logto.anye.xyz/ 即可进入欢迎页面,点击 Create account 按钮注册账户。

可在此处修改显示为 简体中文

对接 Halo

Logto 创建应用

Logto 提供了丰富的模板,我们对接自己现有的应用时通常选用 OIDC,可以在 开始上手 - 查看全部 中的最下面找到。

点击 开始构建 ,输入 应用名称 创建应用。下拉查看 端点和凭据 ,保持此页面待用。

示例:

Halo 添加 OIDC 认证

首先你需要在 Halo 中安装应用:社交 IAM 认证 - Halo - 强大易用的开源建站工具插件,接着在插件配置中 新建认证提供商

自定义 显示名称描述图标 等等

认证类型选择 oidc

认证方法授权类型用户信息认证方法 保持默认

添加一个作用域 openid

授权地址 填写 Logto 管理页面中的 授权端点认证地址 填写 Token 端点用户信息地址 填写 用户信息端点用户唯一属性 填写 sub ,保存。

示例:

Logto 管理页面 Halo 添加认证页面

进入新建认证提供商配置页面,按照 Logto 管理页面中的 应用 IDApp secrets ,填写 Client IDClient Secret ,保存并启用。

配置回调

还没结束,别急着走掉:rofl:,在上图的 客户端 页面查看 回调地址 ,手动修改 {baseUrl} 为你的域名,填写到 Logto 应用设置的 重定向 URIs 字段中。

示例:

退出登录后重定向 URIs 填写首页即可。

测试

在 Halo 的 个人中心 界面中尝试绑定

若能够正常注册 Logto 账户,且正常绑定到 Halo,尝试直接使用 Logto 登录,若成功登录,则说明配置成功。

参考资料

[1] https://docs.logto.io/
[2] FIT2CLOUD 飞致云 - 应用商店

启动失败,报如下错误请问怎么解决呢?

e[2K1Panel-logto-ByB0  | 
e[2K1Panel-logto-ByB0  | > cli
e[2K1Panel-logto-ByB0  | > logto db seed --swe
e[2K1Panel-logto-ByB0  | 
e[2K1Panel-logto-ByB0  | info Seeding skipped
e[2K1Panel-logto-ByB0  | 
e[2K1Panel-logto-ByB0  | > start
e[2K1Panel-logto-ByB0  | > cd packages/core && NODE_ENV=production node .
e[2K1Panel-logto-ByB0  | 
e[2K1Panel-logto-ByB0  | (node:44) ExperimentalWarning: Importing JSON modules is an experimental feature and might change at any time
e[2K1Panel-logto-ByB0  | (Use `node --trace-warnings ...` to show where the warning was created)
e[2K1Panel-logto-ByB0  | index    error Error while initializing app:
e[2K1Panel-logto-ByB0  | index    error Error: timeout expired
e[2K1Panel-logto-ByB0  |     at Timeout._onTimeout (/etc/logto/node_modules/.pnpm/pg@8.11.3/node_modules/pg/lib/client.js:106:28)
e[2K1Panel-logto-ByB0  |     at listOnTimeout (node:internal/timers:581:17)
e[2K1Panel-logto-ByB0  |     at process.processTimers (node:internal/timers:519:7)