无法从Keyrock获取X-Auth-Token:身份验证失败求助
问题:Keyrock身份验证返回401错误(凭证无误但无法获取Token)
我正在做一个大学项目,通过.http文件直接向Keyrock发送请求以获取默认管理员的X-Auth-Token,请求参数无误,且已在MySQL数据库中确认该管理员用户存在,但始终返回401错误。
请求内容
POST http://localhost:3005/v1/auth/tokens Content-Type: application/json {"email":"admin@test.com","password":"1234"}
返回结果
{ "error": { "message": "Invalid email or password", "code": 401, "title": "Unauthorized" } }
Docker Compose配置
version: "3.8" networks: idm_network: driver: bridge #project images services: ... mysql: build: ./mysql command: - "--default-authentication-plugin=mysql_native_password" networks: - idm_network volumes: - mysqlVolume:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=idm - MYSQL_ROOT_HOST=% #- MYSQL_USER=root #- MYSQL_DATABASE=idm keyrock: image: fiware/idm:7.6.0 networks: - idm_network depends_on: - mysql ports: - "3005:3005" - "443:443" environment: - IDM_DB_HOST=mysql - IDM_HOST=http://localhost:3005 - IDM_PORT=3005 #- IDM_DB_PASS=secret #- IDM_DB_USER=idm #- IDM_ADMIN_USER=admin #- IDM_ADMIN_EMAIL=admin@test.com #- IDM_ADMIN_PASS=1234 ... #project volumes volumes: mysqlVolume: mongoOrionVolume: mongoDataVolume:
我尝试过启用和禁用注释的环境变量,但均无效,现在无法推进项目测试,请问可能的原因是什么?
可能的原因分析
- 数据库连接配置不匹配:Keyrock默认使用
idm用户连接数据库,但你的MySQL配置中未创建该用户(仅设置了root密码)。若手动初始化数据库时创建了idm用户,需确保Keyrock的IDM_DB_USER和IDM_DB_PASS环境变量与数据库实际配置一致,否则Keyrock无法读取正确的用户数据。 - 用户密码加密方式不符:Keyrock使用bcrypt加密存储密码,若手动添加用户时使用了明文或MySQL原生加密方式(mysql_native_password),验证时会直接失败。可检查数据库
user表的password字段,确认是否为$2a$开头的bcrypt哈希值。 - Keyrock初始化冲突:若启用
IDM_ADMIN_*系列环境变量,Keyrock启动时会自动创建管理员用户,可能覆盖你手动添加的用户。此时需确保环境变量中的邮箱/密码与请求参数一致,或禁用这些变量避免冲突。 - 数据库就绪延迟:
depends_on仅保证MySQL容器启动,不代表数据库服务完全就绪。Keyrock可能在MySQL未初始化完成时启动,导致未正确加载用户数据。可尝试重启Keyrock容器,或添加启动脚本等待MySQL就绪。 - IDM_HOST配置问题:容器内部的
localhost指向自身,Keyrock的IDM_HOST设置为http://localhost:3005可能导致内部服务调用异常。可尝试改为容器网络内的地址http://keyrock:3005再测试。
内容的提问来源于stack exchange,提问作者Νικόλας Καστρινάκης
相关产品推荐
相关产品推荐

