# 用户中心kratos
kratos介绍
ORY Kratos是根据云架构最佳实践构建的API优先身份和用户管理系统。它实现了几乎每个软件应用程序都需要处理的核心用例:
- 自助登录和注册:允许最终用户使用用户名/电子邮件和密码组合,社交登录(使用
Google,GitHub登录),无密码流等创建和登录帐户(我们称其为idents) - 多重身份验证(MFA/2FA):支持协议,例如
TOTP([RFC 6238](https://tools.ietf.org/html/rfc6238)和[ IETF RFC 4226](https://tools.ietf.org/html/rfc4226)更好地称为 [Google Authenticator](https://en.wikipedia.org/wiki/Google_Authenticator)) - 帐户验证:验证电子邮件地址,电话号码或实际地址实际上属于该身份。
 - 帐户恢复:使用"忘记密码"流,安全代码(如果丢失
MKFA设备)和其他内容来恢复访问权限。 - 个人资料和帐户管理:使用安全流程更新密码,个人详细信息,电子邮件地址,链接的社交个人资料。
 - 管理员API:导入,更新,删除身份。
 
# 1 代码下载
解压说明
把下载的源码解压后放在本地%GOPATH%/src目录下
注:GOPATH为项目的运行时的工作空间位置,GOPATH其中包含三个子目录如下
- src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包)
 - pkg 目录包含包对象
 - bin 目录包含可执行命令
 
# 2 编译kratos
1 "win+R"打开运行。
2 输入"cmd"回车进入命令提示符。
3 进入到kratos对应目录下(本机为D:\go_project\src\kratos)
4 输入go build main.go
 2
3
4
# 3 数据库迁移
# 3.1 迁移配置文件
在项目根目录下面找到
./persistence/sql/.soda.yml进行配置文件的修改,为数据库迁移做准备
dsn: mysql://root:admin@tcp(127.0.0.1:3306)/kratos?parseTime=true&multiStatements=true
 # 3.2 迁移kratos项目的数据到mysql
备注:从这里开始使用Goland编译器来操作kratos项目,用Navicat创建一个数据库kratos
# 3.3 进行kratos项目数据迁移
项目路径在
%GOPATH%\src\kratos下执行以下命令
main.exe --config ./persistence/sql/.soda.yml migrate sql -e --yes
 # 3.4 在Navicat查看是否迁移成功
# 4 修改项目配置文件
项目配置文件在
kratos/docs/.kratos.yaml,具体配置说明如下
点击项目配置文件
serve:
  admin:
    port: 1234
    host: 127.0.0.1
  public:
    port: 1235
    host: 127.0.0.1
#数据库连接dsn
dsn: mysql://root:admin@tcp(localhost:3306)/kratos?parseTime=true&multiStatements=true
selfservice:
  strategies:
    password:
      enabled: true  #打开用户密码验证功能
  logout:
    redirect_to: http://127.0.0.1:3000/auth/login  #登出跳转的地址url
  login:
    request_lifespan: 10m
    after:
      password:
        -
          job: session
        -
          job: redirect
          config:
            default_redirect_url: http://127.0.0.1:3000/
            allow_user_defined_redirect: true
  registration:
    request_lifespan: 10m
    after:
      password:
        -
          job: session
        -
          job: redirect
          config:
            default_redirect_url: http://127.0.0.1:3000/auth/registration  #注册跳转的前端页面URL
            allow_user_defined_redirect: true
log:
  level: debug  
secrets:
  session:
    - PLEASE-CHANGE-ME-I-AM-VERY-INSECURE
urls:
  login_ui: http://127.0.0.1:3000/auth/login   #登录跳转的前端页面URL
  registration_ui: http://127.0.0.1:3000/auth/registration  #注册跳转的前端页面URL
  error_ui: http://127.0.0.1:3000/error   #发生错误跳转的前端页面URL
  profile_ui: http://127.0.0.1:3000/auth/profile  #个人配置文件跳转的前端页面URL
  # 这些未定义,因为在此演示中不可用
  mfa_ui: http://127.0.0.1:3000/
  verify_ui: http://127.0.0.1:3000/
  self:
    public: http://127.0.0.1:1235/  #KRATOS_BROWSER_URL
    admin: http://127.0.0.1:1234/   #KRATOS_ADMIN_URL
  default_return_to: http://127.0.0.1:3000/  #登录注册成功后跳转的页面地址url
  whitelisted_return_to_domains:  #白名单返回域
    - http://127.0.0.1:1235
hashers:
  argon2:
    parallelism: 1
    memory: 131072
    iterations: 2
    salt_length: 16
    key_length: 16
identity:
  traits:
    default_schema_url: http://127.0.0.1:3000/identity.traits.schema.json  #注册身份时的用户schema格式
courier:
  smtp:
    connection_uri: smtp://test:test@mailhog:1025/   #邮箱端口地址配置
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 5 启动kratos项目
在Goland进入
%GOPATH%/src/kratos目录执行以下命令启动项目
main.exe  serve --dev -c  ./docs/.kratos.yaml 
 # 6 绑定前端页面
# 6.1 前端文件结构说明
# 6.2 前端启动
若没有安装nodejs请自行百度安装
//1 下载前端依赖包
 npm i
//2 修改配置文件 kratos-selfservice-ui-node/src/config.ts
//修改对应的后端地址ip 如图6.1
//3 启动前端页面服务
npm run start 
 2
3
4
5
6
7
8
# 7 后台数据库说明
# 7.1 邮件消息表courier_messages
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| type | int(11) | 邮件类型 | 
| status | int(11) | 邮件状态 | 
| body | varchar(255) | 邮件主体内容 | 
| subject | varchar(255) | 邮件主题 | 
| recipient | varchar(255) | 收件人信息 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.2 身份表identities
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| traits_schema_id | varchar(2048) | 身份特征模式id | 
| traits | json | 个性特征 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.3 身份标识符
身份标识符数据表identity_credential_identifiers
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| identifier | varchar(255) | 身份描述 | 
| identity_credential_id | char(36) | identity_credentials主键id | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.4 身份类型
身份证类型数据表identity_credential_types
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| name | varchar(32) | 身份名称 | 
# 7.5 身份证数据表
身份证数据表identity_credentials
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| config | json | 身份加密配置 | 
| identity_credential_type_id | char(36) | identity_credential_type主键id | 
| identity_id | char(36) | identities外键 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.6 迁移记录表
迁移记录表schema_migration
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| version | varchar(14) | 迁移版本号 | 
# 7.7 自助服务错误表
自助服务错误表selfservice_errors
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| errors | json | 错误信息 | 
| seen_at | datetime | 查看时间 | 
| was_seen | tinyint(1) | 是否查看信息0未查看 1已查看 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
| csrf_token | varchar(255) | token数据 | 
# 7.8 登录请求方法记录表
自助服务登录请求方法记录表selfservice_login_request_methods
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| method | varchar(32) | 请求方法 | 
| selfservice_login_request_id | char(36) | selfservice_login_requests表主键id | 
| config | json | 请求方法配置信息 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.9 登录请求记录表
自助服务登录请求记录表selfservice_login_requests
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| request_url | varchar(2048) | 请求的httpUrl | 
| issued_at | datetime | 触发请求时间 | 
| expires_at | datetime | 过期时间 | 
| active_method | varchar(32) | 主动方法 | 
| csrf_token | varchar(255) | csrf令牌 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.10 配置管理请求
自助服务配置管理请求数据表selfservice_profile_management_requests
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| request_url | varchar(2048) | 请求的httpUrl | 
| issued_at | datetime | 触发请求时间 | 
| expires_at | datetime | 过期时间 | 
| form | json | form表单数据 | 
| update_successful | tinyint(1) | 更新是否成功 | 
| identity_id | char(36) | identities主键id | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.11 注册请求方法记录表
自助服务注册请求方法记录表selfservice_registration_request_methods
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| method | varchar(32) | 请求方法 | 
| selfservice_registration_request_id | char(36) | selfservice_registration_requests表主键id | 
| config | json | 请求方法配置信息 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.12 注册请求记录表
自助服务注册请求记录表selfservice_registration_requests
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| request_url | varchar(2048) | 请求的httpUrl | 
| issued_at | datetime | 触发请求时间 | 
| expires_at | datetime | 过期时间 | 
| active_method | varchar(32) | 主动方法 | 
| csrf_token | varchar(255) | csrf令牌 | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 7.13 sessions
| 字段名称 | 字段类型 | 参数说明 | 
|---|---|---|
| id | char(36) | 主键id | 
| issued_at | datetime | 触发请求时间 | 
| expires_at | datetime | 过期时间 | 
| authenticated_at | datetime | 授权时间 | 
| identity_id | char(36) | identities主键id | 
| created_at | datetime | 创建时间 | 
| updated_at | datetime | 修改时间 | 
# 8 Kratos项目swagger详解
# 8.1 项目请求API列表
点击查看项目所有请求API列表
1 Common 公用的接口
 1.1 返回登录请求的上下文 请求方式:GET 
 说明:通过ORY Kratos的Public API访问此终结点时,请确保已设置cookie,以使CSRF正常运行。
 接口:/self-service/browser/flows/requests/login?request=1234
 1.2 获取基于浏览器的配置文件管理流的请求上下文 请求方式:GET 
 说明:通过ORY Kratos的Public API访问此端点时,请确保已设置cookie,因为它们是检查身份验证会话所必需的。
 接口:/self-service/browser/flows/requests/profile
 1.3 该端点返回注册请求的上下文 请求方式:GET 
 说明:通过ORY Kratos的Public API访问此终结点时,请确保已设置cookie,以使CSRF正常运行。
 接口:/self-service/browser/flows/requests/registration
 1.4 该端点返回与面向用户的自助服务错误相关的错误。 请求方式:GET 
 接口:/self-service/errors
2  public
 2.1 该端点初始化基于浏览器的用户登录流程。 请求方式:GET 
 接口:/self-service/browser/flows/login
 说明:该端点初始化基于浏览器的用户登录流程。初始化后,浏览器将重定向至
  urls.login_ui请求ID设置为查询参数的浏览器。如果已经存在有效的用户会话,
  则浏览器将重定向到urls.default_redirect_url。
 2.2 初始化基于浏览器的注销用户流 请求方式:GET 
 接口:/self-service/browser/flows/logout 
 2.3 初始化基于浏览器的配置文件管理流程 请求方式:GET 
 接口:/self-service/browser/flows/profile 
 2.4 完成基于浏览器的配置文件管理流程 请求方式:POST 
 接口:/self-service/browser/flows/profile/update
 2.5 初始化基于浏览器的注册用户流 请求方式:GET 
 接口:/self-service/browser/flows/registration
 2.6 获取基于浏览器的登录用户流的请求上下文 请求方式:GET 
 接口:/self-service/browser/flows/requests/login 
 2.7 获取基于浏览器的配置文件管理流的请求上下文 请求方式:GET 
 接口:/self-service/browser/flows/requests/profile
 2.8 获取基于浏览器的注册用户流的请求上下文 请求方式:GET 
 接口:/self-service/browser/flows/requests/registration
 2.9 此终结点返回与面向用户的自助服务错误相关联的错误 请求方式:GET 
 接口:/self-service/errors
 2.10 检查当前HTTP会话属于谁 请求方式:GET 
 接口:/sessions/whoami
3 admin 
 3.1 列出系统中的所有标识 请求方式:GET 
 接口:/identities
 3.2 创建标识 请求方式:POST 
 接口:/identities
 3.3 获取对应的标识 请求方式:GET 
 接口:/identities/{id}
 3.4 修改对应的标识 请求方式:PUT
 接口:/identities/{id}
 3.5 删除对应的标识 请求方式:DELETE
 接口:/identities/{id}
 3.6 获取基于浏览器的登录用户流的请求上下文 请求方式:GET
 接口:/self-service/browser/flows/requests/login
 3.7获取基于浏览器的配置文件管理流的请求上下文 请求方式:GET
 接口:/self-service/browser/flows/requests/profile
 3.8 获取基于浏览器的注册用户流的请求上下文 请求方式:GET
 接口:/self-service/browser/flows/requests/registration
 3.9 获取面向用户的自助服务错误 请求方式:GET
 接口:/self-service/errors
4 health
 4.1 检查活动状态,请求方式:GET 
 接口:/health/alive
 4.2 检查准备状态,请求方式:GET 
 接口:/health/ready
5 获取服务版本 请求方式:GET 
  接口:/version 
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 9 测试服务
# 9.1 跳转登录页面
跳转流程说明浏览器输入对应的kratos后端地址进行跳转,如果是使用的本文的配置文件, 则跳转示例如下,注意:显示访问后台服务器再重定向前端登录页面
http://127.0.0.1:1235/self-service/browser/flows/login
 # 9.2 注册身份账号
点击登录页的注册账号按钮,跳转到注册页面
http://127.0.0.1:1235/self-service/browser/flows/registration
 # 9.3 登录主页
在登录页面输入注册好的账号密码进行登录,跳转到默认主页









