You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地用MinIO测试Rails ActiveStorage直传遇InvalidSSOToken认证错误

问题描述

在测试环境用MinIO替代S3存储时,执行测试命令bin/bundle exec rspec --fail-fast spec/models/hanzi_spec.rb触发Aws::Errors::InvalidSSOToken错误,错误详情如下:

An error occurred while loading ./spec/models/hanzi_spec.rb.
Failure/Error: require_relative '../config/environment'

Aws::Errors::InvalidSSOToken:
  Token is invalid and failed to refresh.
# ./config/environment.rb:5:in `<top (required)>'
# ./spec/rails_helper.rb:4:in `require_relative'
# ./spec/rails_helper.rb:4:in `<top (required)>'
# ./spec/models/hanzi_spec.rb:4:in `<top (required)>'
No examples found.

Finished in 0.00009 seconds (files took 5.67 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples

已确认MinIO服务正常(通过curl可成功上传文件),测试环境配置如下:

  • config/environments/test.rb中已设置config.active_storage.service = :test
  • config/storage.yaml的test段配置:
test:
  # service: Disk
  # root: <%= Rails.root.join("tmp/storage") %>
  service: S3
  access_key_id: minioadmin
  secret_access_key: minioadmin
  bucket: storage
  endpoint: http://localhost:9000
  force_path_style: true

怀疑测试环境误加载了生产AWS凭证,但无法定位根源,需解决该SSO令牌错误。

解决步骤

1. 排查AWS SDK凭证加载优先级

AWS SDK会自动从多个优先级更高的位置加载凭证,会覆盖storage.yaml的配置:

  • 系统环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY等)
  • 本地AWS配置文件(~/.aws/credentials、~/.aws/config)
  • SSO令牌缓存文件(~/.aws/sso/cache/目录下的文件)

这是导致测试环境触发SSO令牌验证的核心原因。

2. 临时覆盖环境变量运行测试

执行测试前,直接在命令行覆盖AWS相关环境变量,强制使用MinIO凭证:

AWS_ACCESS_KEY_ID=minioadmin AWS_SECRET_ACCESS_KEY=minioadmin bin/bundle exec rspec --fail-fast spec/models/hanzi_spec.rb

3. 修改测试配置跳过默认凭证链

在config/environments/test.rb中添加配置,让Active Storage的S3客户端跳过SDK默认凭证加载逻辑:

config.active_storage.service_configurations[:test][:use_aws_sdk_default_config] = false

或者直接在config/storage.yaml的test配置中添加skip_default_credentials: true(适用于Rails 7+版本):

test:
  service: S3
  access_key_id: minioadmin
  secret_access_key: minioadmin
  bucket: storage
  endpoint: http://localhost:9000
  force_path_style: true
  skip_default_credentials: true

4. 清理本地AWS SSO缓存

如果系统中存在旧的SSO令牌缓存,直接删除缓存目录:

rm -rf ~/.aws/sso/cache/

5. 验证Active Storage服务配置

启动测试环境的Rails控制台,确认服务配置是否正确加载:

RAILS_ENV=test rails c
> Rails.application.config.active_storage.service
# 输出应为:test
> ActiveStorage::Blob.service.config
# 检查输出中的endpoint、access_key_id是否与MinIO配置一致

内容的提问来源于stack exchange,提问作者Matthias Benjamin Schönborn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:41:09