我是如何使用GML从零到一开发认证授权服务的?不来看看?
项目地址
https://github.com/userwanyong/auth-service
开发环境
glm-4.7+claude code开发认证授权服务 以及 glm-5-turbo+cc用于对接两个线上项目
AI辅助确认需求
我要做一个有关登录、权限校验的微服务,请你检索市面上的相关服务(顶级开源项目等),列出我还需要支持哪些功能
审核AI给出的计划后,执行编码

首次启动报错了,默认使用的是JPA

让他改为mybatis
现在你需要将数据操作层换为mybatis,并遵循mapper包的形式
第二次成功启动
测试验收
- 注册:成功注册用户并为他分配默认角色,注册功能验收通过!

- 失败:登录、刷新访问令牌
- 成功:登出、修改密码、删除用户、搜索用户、分配角色、更新用户状态、创建角色、更新角色、删除角色、根据编码获取角色、为角色分配权限、获取所有权限、创建权限、获取权限详情
- 部分成功:获取当前用户信息、获取所有角色、获取角色详情
- 漏写:删除权限
大部分功能是成功的,将自己测试的结果告诉AI,进行修复即可,最终所有功能正常使用
优化
- 因为jwt是无状态的,用户退出登录后再次使用原令牌(accessToken有效期内),依然有权限访问。用户登出同时将此令牌放入redis中,令牌校验时先判断一次是否在黑名单
- 对于token是在过滤器校验的,校验失败直接返回了,客户端什么消息都没收到。需要在校验失败时将具体信息返回给用户(是令牌失效啊还是令牌过期等等)
提供rpc接口
保留 REST API的同时,提供rpc接口并注册到nacos中。你需要先检索顶级开源项目的实现策略,编写一份开发文档,待我审核后再进行编码操作
这里AI给出的方案还是挺完整的,直接开始编写代码
最终,AI生成的yml文件中,有2个文件报错


貌似是idea缓存问题,代码中实际使用jakarta,但他一直报javax的问题
通过使用 webSearchPrime 和 webReader 两个mcp,定位真正原因:

接着让他提供Protobuf的形式来适用不同的编程语言

测试验收
- authenticate、getUserById、hasRole、getUserRoles、generateToken、parseToken、revokeAllTokens 成功通过测试
支持多租户
现在这个微服务貌似只能是单应用认证,如果我想对接多个平台,应该怎么办(参考顶级开源项目的实现方案)
这次使用的是 webSearchPrime 、 webReader 、开源仓库搜索 三个mcp进行资料的搜索以及开源项目结构功能的分析,然后审核AI给出的方案,输入“按计划执行”,就可以去喝茶去了
至此,http的28个接口+rpc的10个接口就告一段落了


优化拓展
1. 现在租户管理与各租户用的是相同的权限,个体租户也可以进行租户管理了,这很不合理,所以对于租户管理应该有单独的一套租户平台权限,用于控制该认证授权微服务对租户的控制(CRUD等)
2. 对于现有的个体租户权限等体系保持不变,只需要新添加一套平台管理权限即可
添加前端页面
初始提示词
充分分析整个项目,确保你完全理解。我需要你写一个前端界面来对接已有的http接口,要求这个管理界面随此后端程序启动时一起启动,注意区分权限问题哦
最终效果如下(未使用任何skill,使用原生html和css作为静态资源随后端一起启动,因为我的最终目的是实用性和轻量级):
登录页

仪表盘

租户平台管理方

普通租户管理方

部署文件
version: '3.8'
services:
auth-service:
image: registry.cn-wulanchabu.aliyuncs.com/wanyj/auth-service:4.0
container_name: auth-service-app
restart: unless-stopped
environment:
TZ: Asia/Shanghai
# Database Configuration
SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:3306/auth_service?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: 12123
# Redis Configuration
SPRING_DATA_REDIS_HOST: 127.0.0.1
SPRING_DATA_REDIS_PORT: 6379
SPRING_DATA_REDIS_PASSWORD: 12123
# Nacos Configuration
dubbo.registry.address: nacos://127.0.0.1:8848
dubbo.registry.username: nacos
dubbo.registry.password: nacos
dubbo.metadata-report.address: nacos://127.0.0.1:8848
dubbo.metadata-report.username: nacos
dubbo.metadata-report.password: nacos
# JVM Configuration
JAVA_OPTS: >-
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=75.0
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xlog:gc*:file=/logs/gc.log:time,tags:filecount=10,filesize=100M
ports:
- "8123:8123" # REST API
- "20880:20880" # Dubbo RPC
volumes:
- app-logs:/app/logs
networks:
- auth-network
# Named volumes for data persistence
volumes:
app-logs:
driver: local
# Network for service communication
networks:
auth-network:
driver: bridge
对接我的两个其他服务
后端部分
提示词集合如下
1. 请你分析整个项目,确保充分理解,特别是登录授权部分
2. 现在你需要参考 https://github.com/userwanyong/auth-service 这个开源项目,完善当前项目的认证授权功能(开源项目环境我已搭建好,你只需要写代码即可)
期间有一个报错,以为是AI搞错了,直接丢给它了,结果一针定位,是我auth-server部署的问题
需要在auth-service部署文件中添加
DUBBO_IP_TO_REGISTRY: 你的ip
完美启动,无报错

修改36文件,新增1文件,所有与之有关的地方都进行了更改
然后让AI修改认证授权服务所要对接的两个项目的前端UI即可
最终本次开发的认证授权服务成功对接我的两线上个项目:
https://xybjz.wanyj.cn/ 和 https://lxzs.wanyj.cn/login 非常省心,这就是Vibe Coding的时代吗,全程没动手敲代码
最后,给大家一个优惠链接,有需要的小伙伴可以来看看:95折优惠链接
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)