go用户中心kratos

article/2025/10/5 14:14:16

用户中心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 代码下载

kratos源码地址下载

解压说明
把下载的源码解压后放在本地%GOPATH%/src目录下

注:GOPATH为项目的运行时的工作空间位置,GOPATH其中包含三个子目录如下

  • src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包)
  • pkg 目录包含包对象
  • bin 目录包含可执行命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VsZP18UG-1591890287967)(/img/goImage/kratos1.png)]

2 编译kratos

1 "win+R"打开运行。
2 输入"cmd"回车进入命令提示符。
3 进入到kratos对应目录下(本机为D:\go_project\src\kratos)
4 输入go build main.go

在这里插入图片描述

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PqQtcssf-1591890287972)(/img/goImage/kratos3.png)]

3.3 进行kratos项目数据迁移

项目路径在%GOPATH%\src\kratos下执行以下命令

main.exe --config ./persistence/sql/.soda.yml migrate sql -e --yes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2UktH6e5-1591890287974)(/img/blogImage/new_kratos6.png)]

3.4 在Navicat查看是否迁移成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-11sDwxOH-1591890287977)(/img/goImage/kratos6.png)]

4 修改项目配置文件

项目配置文件在kratos/docs/.kratos.yaml,具体配置说明如下

点击项目配置文件
serve:admin:port: 1234host: 127.0.0.1public:port: 1235host: 127.0.0.1
#数据库连接dsn
dsn: mysql://root:admin@tcp(localhost:3306)/kratos?parseTime=true&multiStatements=trueselfservice:strategies:password:enabled: true  #打开用户密码验证功能logout:redirect_to: http://127.0.0.1:3000/auth/login  #登出跳转的地址urllogin:request_lifespan: 10mafter:password:-job: session-job: redirectconfig:default_redirect_url: http://127.0.0.1:3000/allow_user_defined_redirect: trueregistration:request_lifespan: 10mafter:password:-job: session-job: redirectconfig:default_redirect_url: http://127.0.0.1:3000/auth/registration  #注册跳转的前端页面URLallow_user_defined_redirect: truelog:level: debug  secrets:session:- PLEASE-CHANGE-ME-I-AM-VERY-INSECUREurls:login_ui: http://127.0.0.1:3000/auth/login   #登录跳转的前端页面URLregistration_ui: http://127.0.0.1:3000/auth/registration  #注册跳转的前端页面URLerror_ui: http://127.0.0.1:3000/error   #发生错误跳转的前端页面URLprofile_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_URLadmin: http://127.0.0.1:1234/   #KRATOS_ADMIN_URLdefault_return_to: http://127.0.0.1:3000/  #登录注册成功后跳转的页面地址urlwhitelisted_return_to_domains:  #白名单返回域- http://127.0.0.1:1235hashers:argon2:parallelism: 1memory: 131072iterations: 2salt_length: 16key_length: 16identity:traits:default_schema_url: http://127.0.0.1:3000/identity.traits.schema.json  #注册身份时的用户schema格式courier:smtp:connection_uri: smtp://test:test@mailhog:1025/   #邮箱端口地址配置

在这里插入图片描述

5 启动kratos项目

在Goland进入%GOPATH%/src/kratos目录执行以下命令启动项目

main.exe  serve --dev -c  ./docs/.kratos.yaml 

在这里插入图片描述

6 绑定前端页面

kratos前端页面地址下载

6.1 前端文件结构说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QFoqS7KR-1591890287982)(/img/blogImage/kratos-ui-node.png)]

6.2 前端启动

若没有安装nodejs请自行百度安装

//1 下载前端依赖包npm i//2 修改配置文件 kratos-selfservice-ui-node/src/config.ts
//修改对应的后端地址ip 如图6.1//3 启动前端页面服务
npm run start 

7 后台数据库说明

7.1 邮件消息表courier_messages

字段名称字段类型参数说明
idchar(36)主键id
typeint(11)邮件类型
statusint(11)邮件状态
bodyvarchar(255)邮件主体内容
subjectvarchar(255)邮件主题
recipientvarchar(255)收件人信息
created_atdatetime创建时间
updated_atdatetime修改时间

7.2 身份表identities

字段名称字段类型参数说明
idchar(36)主键id
traits_schema_idvarchar(2048)身份特征模式id
traitsjson个性特征
created_atdatetime创建时间
updated_atdatetime修改时间

7.3 身份标识符

身份标识符数据表identity_credential_identifiers

字段名称字段类型参数说明
idchar(36)主键id
identifiervarchar(255)身份描述
identity_credential_idchar(36)identity_credentials主键id
created_atdatetime创建时间
updated_atdatetime修改时间

7.4 身份类型

身份证类型数据表identity_credential_types

字段名称字段类型参数说明
idchar(36)主键id
namevarchar(32)身份名称

7.5 身份证数据表

身份证数据表identity_credentials

字段名称字段类型参数说明
idchar(36)主键id
configjson身份加密配置
identity_credential_type_idchar(36)identity_credential_type主键id
identity_idchar(36)identities外键
created_atdatetime创建时间
updated_atdatetime修改时间

7.6 迁移记录表

迁移记录表schema_migration

字段名称字段类型参数说明
versionvarchar(14)迁移版本号

7.7 自助服务错误表

自助服务错误表selfservice_errors

字段名称字段类型参数说明
idchar(36)主键id
errorsjson错误信息
seen_atdatetime查看时间
was_seentinyint(1)是否查看信息0未查看 1已查看
created_atdatetime创建时间
updated_atdatetime修改时间
csrf_tokenvarchar(255)token数据

7.8 登录请求方法记录表

自助服务登录请求方法记录表selfservice_login_request_methods

字段名称字段类型参数说明
idchar(36)主键id
methodvarchar(32)请求方法
selfservice_login_request_idchar(36)selfservice_login_requests表主键id
configjson请求方法配置信息
created_atdatetime创建时间
updated_atdatetime修改时间

7.9 登录请求记录表

自助服务登录请求记录表selfservice_login_requests

字段名称字段类型参数说明
idchar(36)主键id
request_urlvarchar(2048)请求的httpUrl
issued_atdatetime触发请求时间
expires_atdatetime过期时间
active_methodvarchar(32)主动方法
csrf_tokenvarchar(255)csrf令牌
created_atdatetime创建时间
updated_atdatetime修改时间

7.10 配置管理请求

自助服务配置管理请求数据表selfservice_profile_management_requests

字段名称字段类型参数说明
idchar(36)主键id
request_urlvarchar(2048)请求的httpUrl
issued_atdatetime触发请求时间
expires_atdatetime过期时间
formjsonform表单数据
update_successfultinyint(1)更新是否成功
identity_idchar(36)identities主键id
created_atdatetime创建时间
updated_atdatetime修改时间

7.11 注册请求方法记录表

自助服务注册请求方法记录表selfservice_registration_request_methods

字段名称字段类型参数说明
idchar(36)主键id
methodvarchar(32)请求方法
selfservice_registration_request_idchar(36)selfservice_registration_requests表主键id
configjson请求方法配置信息
created_atdatetime创建时间
updated_atdatetime修改时间

7.12 注册请求记录表

自助服务注册请求记录表selfservice_registration_requests

字段名称字段类型参数说明
idchar(36)主键id
request_urlvarchar(2048)请求的httpUrl
issued_atdatetime触发请求时间
expires_atdatetime过期时间
active_methodvarchar(32)主动方法
csrf_tokenvarchar(255)csrf令牌
created_atdatetime创建时间
updated_atdatetime修改时间

7.13 sessions

字段名称字段类型参数说明
idchar(36)主键id
issued_atdatetime触发请求时间
expires_atdatetime过期时间
authenticated_atdatetime授权时间
identity_idchar(36)identities主键id
created_atdatetime创建时间
updated_atdatetime修改时间

8 Kratos项目swagger详解

swagger安装教程

8.1 项目请求API列表

点击查看项目所有请求API列表
1 Common 公用的接口1.1 返回登录请求的上下文 请求方式:GET 说明:通过ORY Kratos的Public API访问此终结点时,请确保已设置cookie,以使CSRF正常运行。接口:/self-service/browser/flows/requests/login?request=12341.2 获取基于浏览器的配置文件管理流的请求上下文 请求方式:GET 说明:通过ORY Kratos的Public API访问此端点时,请确保已设置cookie,因为它们是检查身份验证会话所必需的。接口:/self-service/browser/flows/requests/profile1.3 该端点返回注册请求的上下文 请求方式:GET 说明:通过ORY Kratos的Public API访问此终结点时,请确保已设置cookie,以使CSRF正常运行。接口:/self-service/browser/flows/requests/registration1.4 该端点返回与面向用户的自助服务错误相关的错误。 请求方式:GET 接口:/self-service/errors2  public2.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/update2.5 初始化基于浏览器的注册用户流 请求方式:GET 接口:/self-service/browser/flows/registration2.6 获取基于浏览器的登录用户流的请求上下文 请求方式:GET 接口:/self-service/browser/flows/requests/login 2.7 获取基于浏览器的配置文件管理流的请求上下文 请求方式:GET 接口:/self-service/browser/flows/requests/profile2.8 获取基于浏览器的注册用户流的请求上下文 请求方式:GET 接口:/self-service/browser/flows/requests/registration2.9 此终结点返回与面向用户的自助服务错误相关联的错误 请求方式:GET 接口:/self-service/errors2.10 检查当前HTTP会话属于谁 请求方式:GET 接口:/sessions/whoami3 admin 3.1 列出系统中的所有标识 请求方式:GET 接口:/identities3.2 创建标识 请求方式:POST 接口:/identities3.3 获取对应的标识 请求方式:GET 接口:/identities/{id}3.4 修改对应的标识 请求方式:PUT接口:/identities/{id}3.5 删除对应的标识 请求方式:DELETE接口:/identities/{id}3.6 获取基于浏览器的登录用户流的请求上下文 请求方式:GET接口:/self-service/browser/flows/requests/login3.7获取基于浏览器的配置文件管理流的请求上下文 请求方式:GET接口:/self-service/browser/flows/requests/profile3.8 获取基于浏览器的注册用户流的请求上下文 请求方式:GET接口:/self-service/browser/flows/requests/registration3.9 获取面向用户的自助服务错误 请求方式:GET接口:/self-service/errors4 health4.1 检查活动状态,请求方式:GET 接口:/health/alive4.2 检查准备状态,请求方式:GET 接口:/health/ready5 获取服务版本 请求方式:GET 接口:/version 

9 测试服务

9.1 跳转登录页面

跳转流程说明浏览器输入对应的kratos后端地址进行跳转,如果是使用的本文的配置文件,
则跳转示例如下,注意:显示访问后台服务器再重定向前端登录页面

http://127.0.0.1:1235/self-service/browser/flows/login

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Jlu8jZa-1591890287984)(/img/blogImage/selfservice-ui-01.png)]

9.2 注册身份账号

点击登录页的注册账号按钮,跳转到注册页面

http://127.0.0.1:1235/self-service/browser/flows/registration

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmCCc1qb-1591890287985)(/img/blogImage/selfservice-ui-02.png)]

9.3 登录主页

在登录页面输入注册好的账号密码进行登录,跳转到默认主页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TIYHojph-1591890287987)(/img/blogImage/selfservice-ui-03.png)]

10 更多资料参考

Kratos源码

http://127.0.0.1:1235/self-service/browser/flows/registration

[外链图片转存中...(img-kmCCc1qb-1591890287985)]

9.3 登录主页

在登录页面输入注册好的账号密码进行登录,跳转到默认主页

[外链图片转存中...(img-TIYHojph-1591890287987)]

10 更多资料参考

Kratos源码

Kratos官网文档


http://chatgpt.dhexx.cn/article/Apg28aKy.shtml

相关文章

Kratos 集成Gin

Kratos 集成 Gin 规范项目分层处理请求处理、响应编写路由routeKratos 集成gin注入 wire set中 源码 Kratos 可以在 .proto文件定义请求类型,URL,响应等等,如官方示例: service BlogService {rpc CreateArticle (CreateArticleRe…

kratos mysql_Kratos--安装及配置

安装GO环境 安装protoc以及相关的包和插件 安装Kratos Go version>1.12 and GO111MODULEon go get -u github.com/bilibili/kratos/tool/kratos 提示:安装过程中可能会出现部分包下载失败,可以手动下载包然后拷贝至相应文件目录。 快速开始 cd $GOPAT…

初识go-kratos

推荐看一下 Kratos 官方文档 更加流畅观看此文章,本机器这里已经安装好了 kratos、proto、wire、make 等所需的命令工具 1.先下载beer-shop模板 git clone https://github.com/go-kratos/beer-shop.git 2.删除api和app下的全部文件 3.修改go.mod文件 把module g…

kratos mysql_kratos微服务框架学习笔记一(kratos-demo)

本文将为您描述kratos微服务框架学习笔记一(kratos-demo),教程操作步骤: 目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和github,现在开发任务也差不多完成…

Kratos日志

一.如何在kratos框架中使用 参考官方文档中描述,为了方便业务自适配不同的 log 接入使用,Logger 只包含了最简单的 Log 接口。当业务需要在 Kratos 框架内部使用自定义的 log的时候,只需要简单实现方法即可。日志库较为公用建议放在kit基础库…

kratos框架学习,在Linux 下面使用kratos 创建demo 项目然后跑起来。使用 kratos new kratos-demo 一键创建项目,脚手架非常方便。但是依赖grpc没有起来

目录 前言1,关于kratos2,使用 kratos new kratos-demo 一键创建项目3,解决gRPC 编译问题4,只创建HTTP服务 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/109139648 未经博主允许不得转载。 博主地址…

砥砺前行 | Kratos 框架 v2 版本架构演进之路

Kratos 是一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。名字来源于游戏《战神》,该游戏以希腊神话为背景,讲述了奎托斯(Kratos)由凡人成为战神并展开弑神屠杀的冒险历程。 写在前面 从 2021 年 2 月份&…

【kratos入门实战教程】1-kratos项目搭建和开发环境配置

1、系列目录 【kratos入门实战教程】0-商城项目介绍【kratos入门实战教程】1-kratos项目搭建和开发环境配置【kratos入门实战教程】2-实现注册登陆业务 2、概览 经过上一篇的说明,本篇教程正式开始搭建项目。深入解析工程项目的目录结构和介绍一些开发需要使用的工…

go微服务框架Kratos简单使用总结

Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神诸神黄昏比较火,主角就是奎托斯。这个框架的名字就取自他。 在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比之下,选择了Krato…

c语言代码后return0表示什么意思,C语言中return 0 表示什么

满意答案 强计划止步不.. 2013.01.03 采纳率:44% 等级:12 已帮助:7948人 return表示函数结束, 也就是说CPU执行到return后, 就会跳转(如果要好理解的话, 是"回到")到调用它的地方, 然后继续执行. 而0, 是一个整型, 一般来说retu…

c语言代码后return0表示什么意思,return 0是什么意思 ?

return 0 代表告诉调用者程序是正常退出的。return是C预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。 这个return语句结束main()函数的执行,把0返还给操作系统。从main()函数返回0表…

接口性能测试方案

一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件(B/S一样)的响应时间可以细分为网络传输时间、应…

软件性能测试方案-性能测试准备

性能测试目的 1、性能调优 开发人员对系统调优后,需要测试人员配合去做性能测试,验证这次优化是否有效果。如果性能指标相比较之前的性能指标更好了,说明系统优化的有效果。反之说明调优不理想 2、新业务、新接口上线 系统从无到上线&…

参考文档一:性能测试---测试方案

性能测试详细测试方案 前言 平台XX项目系统已经成功发布,依据项目的规划,未来势必会出现业务系统中信息大量增长的态势。 随着业务系统在生产状态下日趋稳定、成熟,系统的性能问题也逐步成为了我们关注的焦点:每天大数据量的“…

【性能测试】性能测试方案设计

性能测试方案设计 1. 性能测试流程 系统架构调研 业务模型分析调研 测试需求分析设计测试方案测试环境搭建测试数据准备测试工具开发测试场景设置执行场景测试测试结果分析提交测试报告 2. 性能测试需求分析和范围确定 收集性能需求信息分析应用程序 系统设计和架构信息网…

接口性能测试方案 白皮书 V1.0

一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件的响应时间可以细分为网络传输时间、应用服务器处理时间、数据库服务器处…

性能测试案例

做性能测试之前需要对Linux内核参数优化 Linux内核参数优化 Linux服务器默认支持1024个TCP链接,在性能测试时,无论压力机还是项目服务器,都需要对tcp参数进行一些优化 ulimit -n:查看当前Linux系统最大的连接数 修改Linux系统允许…

性能测试(一)

一)谈谈你对于性能测试的理解: 1)性能测试的概念 测试目的与功能测试的区别性能测试的指标 2)性能测试需要借助工具来进行测试,可以说说自己是用了哪些工具以及如何使用工具来进行性能测试 3)为了避免面试官在性能测试方面进行深究,主动说性能测试难就难…

最全面性能测试方案模板

性能测试方案书 1 简介 1.1目的 编写本文档的目的在于描述测试项目的测试范围,定义测试条件和目标,测试策略和要求,分析可能的风险,提供相应的规避措施或应急对策,并确定测试整体进度的计划和人力资源安排等。 测试目…

性能测试介绍

转载来源 公众号《测试开发技术》 1.性能测试要开专栏了 提起性能测试,可能很多互联网从业人员会感觉比较混淆(不仅仅只是测试人员会弄混淆,很多开发人员、管理人员对性能测试也都是一知半解)。性能测试,它是属于测试…