MinIO的OpenID配置调试
MinIO官方文档对于没有OpenID基础的人来说,写的不太清楚。这次配置被 Claim Name
搞的要死,起初根本不知道这是啥玩意儿。总是出以下错误:
Policy claim missing from the JWT token, credentials will not be generated
Claim Name
是只 OpenID 服务器那边返回的 JWT 令牌里包含的字段名,并以此字段内容作为作为权限(Policies)名称并赋予用户相应的权限。而我是要跟微软的授权系统进行集成,而微软授权系统返回的 JWT 令牌里没有 MinIO 默认需要的 policy
这个字段。就导致了以上错误。
通过以下命令可以获取 MinIO 服务器的 OpenID 配置。
mc admin config get local identity_openid
会得到类似下面的信息:
identity_openid:Office365 display_name= config_url=https://login.microsoftonline.com/xxx/v2.0/.well-known/openid-configuration client_id=xxxe1bdab0 client_secret=xxx3SpaP2 claim_name=groups claim_userinfo=on role_policy= claim_prefix= redirect_uri=https://minio.example/oauth_callback redirect_uri_dynamic=off scopes= vendor= keycloak_realm= keycloak_admin_url=
现对于网页版管理界面,这个可以准确的知道已经被应用的服务器的配置,网页上需要刷新,否则不一定准确,因为有可能保存失败。
通过以下命令监控统一登录信息:
mc admin trace -v -a local
在使用 OpenID 进行登陆时,会得到类似下面的信息:
127.0.0.1:9000 [OS os.Lstat] [2023-03-14T15:07:54.084] /data/.minio.sys/format.json 23.653µs 127.0.0.1:9000 [REQUEST sts.AssumeRoleWithSSO] [2023-03-14T15:08:06.090] [Client IP: 127.0.0.1] 127.0.0.1:9000 POST / 127.0.0.1:9000 Proto: HTTP/1.1 127.0.0.1:9000 Host: 127.0.0.1:9000 127.0.0.1:9000 Content-Type: application/x-www-form-urlencoded 127.0.0.1:9000 User-Agent: Go-http-client/1.1 127.0.0.1:9000 Content-Length: 1198 127.0.0.1:9000 Action=AssumeRoleWithWebIdentity&DurationSeconds=3600&Version=2011-06-15&WebIdentityToken=eyJ0eXAiOiJKV1QiLCJxxxxxxIi1LSTNROW5OUjdiUm9meG1lWm9YcWJIWkdldyJ9.eyJhdWQiOiIzMDRiYjIzZS0wZWY5LTQzNzItOWU0OC0wYWQ3N2UxYmRhYjAixxxxZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNzc4MTcyYzctZGQ2MC00ZTllLThkMTItNzFhNThmZTQ4ZmY2L3YyLjAiLCJpYXQiOjE2NxxxxM4NSwiZXhwIjoxNjc4NzgxMjg1LCJlbWFpbCI6ImxpbnhpQHJ6b24udGVjaCIsIm5hbWUiOiLmnpcg5biMIiwib2lkIjoiMzE2ZTc0YjQtNzZiOC00NzU0LWIxNWItMTkxYWI3MzliNTkyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibGlueGlAcnpvbi50ZWNoIiwicmgiOiIwLkFYQUF4M0tCZDJEZxxxxxxxJCd0FEby4iLCJzdWIiOiJmSUw1dHlMbVFzd3pNV3lITkkzZDVqUGF1MkRxxxx4MTcyYzctZGQ2MC00ZTllLThkMTItNzFhNThmZTQ4ZmY2IiwidXRpIjoiYUg1UWUwTVJvRXlKQ0NOVVJZeUdBQSIsInZlciI6IjIuMCJ9.V7IYVVuglODuwwGzxxxxQa-LWJUKG2qgZV_MHGO3TetSQwPgwD0XdxxxxFacQ69a4C_qy3qZct_1Id-CV43YVsodiC4iZQ953Qy_VvO5dZ9ajQBPUodAnVAmFcD3gFIxxxxPUYxpsvbH3NHuxMB8wHJEfS_s2yp4RQ79aSOOkCS8VyojpSKpxxxxO8t-j68VzQOsB_3Pea1vg8UWo6Cz_lItTLje0NBB415r2A 127.0.0.1:9000 [RESPONSE] [2023-03-14T15:08:06.091] [ Duration 463µs ↑ 1.2 KiB ↓ 314 B ] 127.0.0.1:9000 400 Bad Request 127.0.0.1:9000 Content-Type: application/xml 127.0.0.1:9000 Server: MinIO 127.0.0.1:9000 Strict-Transport-Security: max-age=31536000; includeSubDomains 127.0.0.1:9000 X-Amz-Request-Id: 174C3769344BEF85 127.0.0.1:9000 X-Content-Type-Options: nosniff 127.0.0.1:9000 X-Xss-Protection: 1; mode=block 127.0.0.1:9000 Accept-Ranges: bytes 127.0.0.1:9000 Content-Length: 314 127.0.0.1:9000 X-Amz-Id-2: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 127.0.0.1:9000 Content-Security-Policy: block-all-mixed-content 127.0.0.1:9000 Vary: Origin 127.0.0.1:9000 <?xml version="1.0" encoding="UTF-8"?> <ErrorResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"><Error><Type></Type><Code>InvalidParameterValue</Code><Message>policy claim missing from the JWT token, credentials will not be generated</Message></Error><RequestId>174C3769344BEF85</RequestId></ErrorResponse> 127.0.0.1:9000 127.0.0.1:9000 [OS os.Lstat] [2023-03-14T15:08:09.084] /data/.minio.sys/format.json 20.816µs
把其中的 WebIdentityToken
信息复制到 jwt.io,可以看到 JWT 令牌中都包含了哪些信息。如果有合适作为授权的字段,那就将其设置到 Claim Name
。如果没有,则需要去配置 OpenID 服务器,增加合适的字段。