天天看点

Ory Kratos 用户认证

Ory Kratos 为用户认证与管理系统。本文将动手实现浏览器(React+AntD)的完整流程,实际了解下它的 API 。

代码: https://github.com/ikuokuo/start-ory-kratos

go-swagger 查看:

Ory Kratos 用户认证

docker-compose 运行:

运行了官方 Quickstart 例子,可以访问 http://127.0.0.1:4455/dashboard 体验。

pgAdmin 打开(DB 信息见 <code>quickstart-postgres.yml</code>):

Ory Kratos 用户认证

查看表:

Ory Kratos 用户认证

设置环境变量可以覆盖。以 <code>_</code> 表示层级,如 <code>SELFSERVICE_FLOWS_SETTINGS_UI_URL=&lt;value&gt;</code> 覆盖 <code>selfservice.flows.settings.ui_url</code>。

Registration

Login

Logout

User Settings

Account Recovery

Address Verification

User-Facing Error

2FA / MFA

Ory Kratos 用户认证
Ory Kratos 用户认证

Ory Kratos

Public API (port 4433)

Admin API (port 4434)

Postgres DB (port 5432)

Browser Return URL (port 3000)

MailSlurper: a development SMTP server

Server UI (port 4436)

ory-kratos/config/kratos.yml: 配置文件

ory-kratos/config/identity.schema.json: 认证 JSON 模式

ory-kratos/start.yml: Docker Compose 文件

如果想运行官方 Self-Service UI 例子,那么:

之后,访问 http://127.0.0.1:3000/ 体验。在 <code>Register new account</code> / <code>Reset password</code> 时,可访问虚拟 SMTP 服务 http://127.0.0.1:4436 接收邮件。

React + Ant Design

访问 http://localhost:3000/ ,可见 React 欢迎页。

修改 <code>src/App.tsx</code>,引入 antd 组件:

修改 <code>src/App.css</code>,引入 antd 样式:

可见 antd 蓝色按钮组件。

Ory Kratos 用户认证

后缀 <code>css</code> 改为 <code>scss</code> ,<code>tsx</code> 里的 <code>import</code> 也改下。

于 <code>pages</code> 目录下实现如下页面 UI:

APIs:

<code>GET</code> <code>/self-service/registration/browser</code>: 初始化注册流程

<code>GET</code> <code>/self-service/registration/flows</code>: 获取注册流程

<code>POST</code> <code>/self-service/registration</code>: 提交注册流程

页面加载后的处理流程:

流程信息 <code>this.state.flow</code>,如下:

之后,依据流程信息创建表单:

其中表单 <code>onFinish</code> 里处理提交:

<code>GET</code> <code>/self-service/login/browser</code>: 初始化登录流程

<code>GET</code> <code>/self-service/login/flows</code>: 获取登录流程

<code>POST</code> <code>/self-service/login</code>: 提交登录流程

与注册流程一样。

登录后,可通过 <code>whoami</code> 获取授权信息:

<code>GET</code> <code>/sessions/whoami</code>: 获取授权信息

<code>Dashboard</code> 页展示了授权信息:

Ory Kratos 用户认证

<code>GET</code> <code>/self-service/verification/browser</code>: 初始化验证流程

<code>GET</code> <code>/self-service/verification/flows</code>: 获取验证流程

<code>POST</code> <code>/self-service/verification</code>: 提交验证流程

<code>GET</code> <code>/self-service/recovery/browser</code>: 初始化恢复流程

<code>GET</code> <code>/self-service/recovery/flows</code>: 获取恢复流程

<code>POST</code> <code>/self-service/recovery</code>: 提交恢复流程

<code>GET</code> <code>/self-service/settings/browser</code>: 初始化设置流程

<code>GET</code> <code>/self-service/settings/flows</code>: 获取设置流程

<code>POST</code> <code>/self-service/settings</code>: 完成设置流程

但要注意的是,依据流程信息创建表单时,请区分 <code>group</code> 构建多个表单:

Ory Kratos 用户认证

<code>GET</code> <code>/self-service/logout/browser</code>: 创建登出 URL

<code>POST</code> <code>/self-service/logout</code>: 完成登出流程

页面加载后创建登出 URL ,

之后,页面加上登出按钮:

ORY Kratos ExpressJS Self-Service UI Reference

Kratos React Example

GoCoding 个人实践的经验分享,可关注公众号!