9.3. 用户和访问权限管理
使用这些字段配置如何创建、验证和管理用户。这包括超级用户、帐户恢复、特定于应用程序的令牌、登录行为和 LDAP、OAuth 和 OIDC 等外部身份提供程序的设置。
9.3.1. 用户配置字段
用户配置字段定义用户帐户在 Red Hat Quay 部署中的行为方式。这些字段允许对用户创建、访问级别、元数据跟踪、恢复选项和命名空间管理进行控制。您还可以强制实施限制,如仅邀请创建或超级用户权限,以匹配组织的管理和安全策略。
字段 | 类型 | 描述 |
---|---|---|
FEATURE_SUPER_USERS | 布尔值 |
是否支持超级用户 |
FEATURE_USER_CREATION | 布尔值 |
是否可以创建用户(非超级用户) |
FEATURE_USER_LAST_ACCESSED | 布尔值 |
是否记录用户被访问最后一次访问的时间 |
FEATURE_USER_LOG_ACCESS | 布尔值 |
如果设置为 true,用户有权访问其命名空间的审计日志 |
FEATURE_USER_METADATA | 布尔值 |
是否收集和支持用户元数据 |
FEATURE_USERNAME_CONFIRMATION | 布尔值 |
如果设置为 true,用户可以在通过 OpenID Connect (OIDC)或非数据库内部身份验证供应商(如 LDAP)登录时确认并修改其初始用户名。 |
FEATURE_USER_RENAME | 布尔值 |
如果设置为 true,用户可以重命名自己的命名空间 |
FEATURE_INVITE_ONLY_USER_CREATION | 布尔值 |
要创建的用户是否必须被其他用户邀请 |
FRESH_LOGIN_TIMEOUT | 字符串 |
新登录的时间需要用户重新输入其密码 |
USERFILES_LOCATION | 字符串 |
放置用户上传文件的存储引擎 ID |
USERFILES_PATH | 字符串 |
放置用户上传文件的存储的路径 |
USER_RECOVERY_TOKEN_LIFETIME | 字符串 |
恢复用户帐户的令牌时间长度是有效的 |
FEATURE_SUPERUSERS_FULL_ACCESS | 布尔值 | 授予超级用户从命名空间中的其他存储库读取、写入和删除它们没有拥有或明确权限的那些存储库的权限。
Default: |
FEATURE_SUPERUSERS_ORG_CREATION_ONLY | 布尔值 | 是否只允许超级用户创建机构。
Default: |
FEATURE_RESTRICTED_USERS | 布尔值 |
当使用
Default: |
RESTRICTED_USERS_WHITELIST | 字符串 |
当使用 |
GLOBAL_READONLY_SUPER_USERS | 字符串 |
设置后,可授予用户对所有存储库的读取访问权限,无论它们是公共存储库。仅适用于通过 |
用户 YAML 示例
# ... FEATURE_SUPER_USERS: true FEATURE_USER_CREATION: true FEATURE_INVITE_ONLY_USER_CREATION: false FEATURE_USER_RENAME: true FEATURE_SUPERUSERS_FULL_ACCESS: true FEATURE_SUPERUSERS_ORG_CREATION_ONLY: false FEATURE_RESTRICTED_USERS: true RESTRICTED_USERS_WHITELIST: - user1 GLOBAL_READONLY_SUPER_USERS: - quayadmin FRESH_LOGIN_TIMEOUT: "5m" USER_RECOVERY_TOKEN_LIFETIME: "30m" USERFILES_LOCATION: "s3_us_east" USERFILES_PATH: "userfiles" # ...
# ...
FEATURE_SUPER_USERS: true
FEATURE_USER_CREATION: true
FEATURE_INVITE_ONLY_USER_CREATION: false
FEATURE_USER_RENAME: true
FEATURE_SUPERUSERS_FULL_ACCESS: true
FEATURE_SUPERUSERS_ORG_CREATION_ONLY: false
FEATURE_RESTRICTED_USERS: true
RESTRICTED_USERS_WHITELIST:
- user1
GLOBAL_READONLY_SUPER_USERS:
- quayadmin
FRESH_LOGIN_TIMEOUT: "5m"
USER_RECOVERY_TOKEN_LIFETIME: "30m"
USERFILES_LOCATION: "s3_us_east"
USERFILES_PATH: "userfiles"
# ...
- 1
- 当设置了
RESTRICTED_USERS_WHITELIST
字段时,用户也可以从存储库创建机构,即使FEATURE_RESTRICTED_USERS
设置为true
。其他用户(如user2、
user3
和user4)
仅限于创建机构、读取或写入内容。
9.3.2. 机器人帐户配置字段
以下配置字段允许全局禁止机器人帐户创建和交互。
其他资源
字段 | 类型 | 描述 |
---|---|---|
ROBOTS_DISALLOW | 布尔值 |
当设置为 |
机器人帐户不允许示例 YAML
# ... ROBOTS_DISALLOW: true # ...
# ...
ROBOTS_DISALLOW: true
# ...
9.3.3. LDAP 配置字段
以下配置字段允许管理员将 Red Hat Quay 与基于 LDAP 的身份验证系统集成。当 AUTHENTICATION_TYPE
设置为 LDAP
时,Red Hat Quay 可以针对 LDAP 目录验证用户,并支持其他可选功能,如团队同步、超级用户访问控制、受限用户角色和安全连接参数。
本节提供了以下 LDAP 情境的 YAML 示例:
- 基本 LDAP 配置
- LDAP 受限用户配置
- LDAP 超级用户配置
字段 | 类型 | 描述 |
---|---|---|
AUTHENTICATION_TYPE | 字符串 |
必须设置为 |
FEATURE_TEAM_SYNCING | 布尔值 |
是否允许团队成员资格与身份验证引擎中的后备组同步(OIDC、LDAP 或 Keystone)。 |
FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP | 布尔值 |
如果启用,非超级用户可设置团队同步。 |
LDAP_ADMIN_DN | 字符串 | 用于 LDAP 验证的管理 DN。 |
LDAP_ADMIN_PASSWD | 字符串 | LDAP 验证的 admin 密码。 |
LDAP_ALLOW_INSECURE_FALLBACK | 布尔值 | 是否允许 LDAP 身份验证的 SSL 不安全回退。 |
LDAP_BASE_DN | 字符串数组 | 用于 LDAP 身份验证的基本 DN。 |
LDAP_EMAIL_ATTR | 字符串 | LDAP 身份验证的电子邮件属性。 |
LDAP_UID_ATTR | 字符串 | LDAP 身份验证的 uid 属性。 |
LDAP_URI | 字符串 | LDAP URI。 |
LDAP_USER_FILTER | 字符串 | LDAP 身份验证的用户过滤器。 |
LDAP_USER_RDN | 字符串数组 | 用于 LDAP 身份验证的用户 RDN。 |
LDAP_SECONDARY_USER_RDNS | 字符串数组 | 如果用户对象所在的多个机构单元,则提供二级用户相对 DN。 |
TEAM_RESYNC_STALE_TIME | 字符串 |
如果为团队启用了团队同步,则检查其成员资格和重新同步的频率。 |
LDAP_SUPERUSER_FILTER | 字符串 |
使用此字段,管理员可以添加或删除超级用户,而无需更新 Red Hat Quay 配置文件并重启其部署。
此字段要求将 |
LDAP_GLOBAL_READONLY_SUPERUSER_FILTER | 字符串 |
设置后,可授予用户对所有存储库的读取访问权限,无论它们是公共存储库。仅适用于通过 |
LDAP_RESTRICTED_USER_FILTER | 字符串 |
此字段要求将 |
FEATURE_RESTRICTED_USERS | 布尔值 |
当设为
Default: |
LDAP_TIMEOUT | 整数 |
指定 LDAP 操作的时间限制(以秒为单位)。这限制了 LDAP 搜索、绑定或其他操作可以花费的时间。与 |
LDAP_NETWORK_TIMEOUT | 整数 |
指定与 LDAP 服务器建立连接的时间限制(以秒为单位)。这是 Red Hat Quay 在网络操作期间等待响应的最长时间,类似于 |
基本 LDAP 配置示例 YAML
# ... AUTHENTICATION_TYPE: LDAP # ... LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com LDAP_ADMIN_PASSWD: ABC123 LDAP_ALLOW_INSECURE_FALLBACK: false LDAP_BASE_DN: - dc=example - dc=com LDAP_EMAIL_ATTR: mail LDAP_UID_ATTR: uid LDAP_URI: ldap://<example_url>.com LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,dc=<domain_name>,dc=com) LDAP_USER_RDN: - ou=people LDAP_SECONDARY_USER_RDNS: - ou=<example_organization_unit_one> - ou=<example_organization_unit_two> - ou=<example_organization_unit_three> - ou=<example_organization_unit_four>
# ...
AUTHENTICATION_TYPE: LDAP
# ...
LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com
LDAP_ADMIN_PASSWD: ABC123
LDAP_ALLOW_INSECURE_FALLBACK: false
LDAP_BASE_DN:
- dc=example
- dc=com
LDAP_EMAIL_ATTR: mail
LDAP_UID_ATTR: uid
LDAP_URI: ldap://<example_url>.com
LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,dc=<domain_name>,dc=com)
LDAP_USER_RDN:
- ou=people
LDAP_SECONDARY_USER_RDNS:
- ou=<example_organization_unit_one>
- ou=<example_organization_unit_two>
- ou=<example_organization_unit_three>
- ou=<example_organization_unit_four>
LDAP 受限用户配置示例 YAML
# ... AUTHENTICATION_TYPE: LDAP # ... FEATURE_RESTRICTED_USERS: true # ... LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com LDAP_ADMIN_PASSWD: ABC123 LDAP_ALLOW_INSECURE_FALLBACK: false LDAP_BASE_DN: - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_EMAIL_ATTR: mail LDAP_UID_ATTR: uid LDAP_URI: ldap://<example_url>.com LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com) LDAP_RESTRICTED_USER_FILTER: (<filterField>=<value>) LDAP_USER_RDN: - ou=<example_organization_unit> - o=<organization_id> - dc=<example_domain_component> - dc=com # ...
# ...
AUTHENTICATION_TYPE: LDAP
# ...
FEATURE_RESTRICTED_USERS: true
# ...
LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com
LDAP_ADMIN_PASSWD: ABC123
LDAP_ALLOW_INSECURE_FALLBACK: false
LDAP_BASE_DN:
- o=<organization_id>
- dc=<example_domain_component>
- dc=com
LDAP_EMAIL_ATTR: mail
LDAP_UID_ATTR: uid
LDAP_URI: ldap://<example_url>.com
LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com)
LDAP_RESTRICTED_USER_FILTER: (<filterField>=<value>)
LDAP_USER_RDN:
- ou=<example_organization_unit>
- o=<organization_id>
- dc=<example_domain_component>
- dc=com
# ...
LDAP 超级用户配置参考 YAML 示例
# ... AUTHENTICATION_TYPE: LDAP # ... LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com LDAP_ADMIN_PASSWD: ABC123 LDAP_ALLOW_INSECURE_FALLBACK: false LDAP_BASE_DN: - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_EMAIL_ATTR: mail LDAP_UID_ATTR: uid LDAP_URI: ldap://<example_url>.com LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com) LDAP_SUPERUSER_FILTER: (<filterField>=<value>) LDAP_USER_RDN: - ou=<example_organization_unit> - o=<organization_id> - dc=<example_domain_component> - dc=com # ...
# ...
AUTHENTICATION_TYPE: LDAP
# ...
LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com
LDAP_ADMIN_PASSWD: ABC123
LDAP_ALLOW_INSECURE_FALLBACK: false
LDAP_BASE_DN:
- o=<organization_id>
- dc=<example_domain_component>
- dc=com
LDAP_EMAIL_ATTR: mail
LDAP_UID_ATTR: uid
LDAP_URI: ldap://<example_url>.com
LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com)
LDAP_SUPERUSER_FILTER: (<filterField>=<value>)
LDAP_USER_RDN:
- ou=<example_organization_unit>
- o=<organization_id>
- dc=<example_domain_component>
- dc=com
# ...
- 1
- 将指定用户配置为超级用户。
9.3.4. OAuth 配置字段
以下字段定义 Red Hat Quay 在使用 OAuth 通过外部身份提供程序进行身份验证时的行为。您可以配置全局 OAuth 选项,如令牌分配和白名单客户端 ID,以及 GitHub 和 Google 的特定于供应商的设置。
字段 | 类型 | 描述 |
---|---|---|
DIRECT_OAUTH_CLIENTID_WHITELIST | 字符串数组 | 允许在没有用户批准的情况下执行直接 OAuth 批准的 Quay 管理 的应用程序的客户端 ID 列表。 |
FEATURE_ASSIGN_OAUTH_TOKEN | 布尔值 | 允许机构管理员将 OAuth 令牌分配给其他用户。 |
全局 OAuth 示例 YAML
# ... DIRECT_OAUTH_CLIENTID_WHITELIST: - <quay_robot_client> - <quay_app_token_issuer> FEATURE_ASSIGN_OAUTH_TOKEN: true # ...
# ...
DIRECT_OAUTH_CLIENTID_WHITELIST:
- <quay_robot_client>
- <quay_app_token_issuer>
FEATURE_ASSIGN_OAUTH_TOKEN: true
# ...
其他资源
字段 | 类型 | 描述 |
---|---|---|
FEATURE_GITHUB_LOGIN | 布尔值 |
是否支持 GitHub 登录 |
GITHUB_LOGIN_CONFIG | 对象 | 使用 GitHub (Enterprise)作为外部登录提供程序的配置。 |
.ALLOWED_ORGANIZATIONS | 字符串数组 | GitHub (企业)组织的名称,使用 ORG_RESTRICT 选项。 |
.API_ENDPOINT | 字符串 |
要使用的 GitHub (企业)API 的端点。对于 github.com |
.CLIENT_ID | 字符串 |
此 Red Hat Quay 实例的注册客户端 ID;无法与 |
.CLIENT_SECRET | 字符串 |
此 Red Hat Quay 实例的注册客户端 secret。 |
.GITHUB_ENDPOINT | 字符串 |
GitHub 的端点(Enterprise)。 |
.ORG_RESTRICT | 布尔值 | 如果为 true,只有机构白名单中的用户才能使用这个供应商登录。 |
GitHub OAth 示例 YAML
# ... FEATURE_GITHUB_LOGIN: true GITHUB_LOGIN_CONFIG: ALLOWED_ORGANIZATIONS: - <myorg> - <dev-team> API_ENDPOINT: <https://api.github.com/> CLIENT_ID: <client_id> CLIENT_SECRET: <client_secret> GITHUB_ENDPOINT: <https://github.com/> ORG_RESTRICT: true # ...
# ...
FEATURE_GITHUB_LOGIN: true
GITHUB_LOGIN_CONFIG:
ALLOWED_ORGANIZATIONS:
- <myorg>
- <dev-team>
API_ENDPOINT: <https://api.github.com/>
CLIENT_ID: <client_id>
CLIENT_SECRET: <client_secret>
GITHUB_ENDPOINT: <https://github.com/>
ORG_RESTRICT: true
# ...
字段 | 类型 | 描述 |
---|---|---|
FEATURE_GOOGLE_LOGIN | 布尔值 |
是否支持 Google 登录。 |
GOOGLE_LOGIN_CONFIG | 对象 | 使用 Google 进行外部身份验证的配置。 |
.CLIENT_ID | 字符串 |
此 Red Hat Quay 实例的注册客户端 ID。 |
.CLIENT_SECRET | 字符串 |
此 Red Hat Quay 实例的注册客户端 secret。 |
Google OAuth 示例 YAML
# ... FEATURE_GOOGLE_LOGIN: true GOOGLE_LOGIN_CONFIG: CLIENT_ID: <client_id> CLIENT_SECRET: <client_secret> # ...
# ...
FEATURE_GOOGLE_LOGIN: true
GOOGLE_LOGIN_CONFIG:
CLIENT_ID: <client_id>
CLIENT_SECRET: <client_secret>
# ...
9.3.5. OIDC 配置字段
您可以配置 Red Hat Quay,以通过任何兼容 OpenID Connect (OIDC)的身份提供程序验证用户,包括 Azure Entra ID (以前称为 Azure AD)、Okta、Keycloak 等。这些字段定义 OIDC 登录流过程中使用的必要客户端凭证、端点和令牌行为。
字段 | 类型 | 描述 |
---|---|---|
<string>_LOGIN_CONFIG | 字符串 |
包含 OIDC 配置设置的父密钥。通常,OIDC 供应商的名称,如 |
.CLIENT_ID | 字符串 |
此 Red Hat Quay 实例的注册客户端 ID。 |
.CLIENT_SECRET | 字符串 |
此 Red Hat Quay 实例的注册客户端 secret。 |
.DEBUGLOG | 布尔值 | 是否启用调试。 |
.LOGIN_BINDING_FIELD | 字符串 | 当内部授权设置为 LDAP 时使用。Red Hat Quay 读取此参数,并尝试使用此用户名为用户搜索 LDAP 树。如果存在,它会自动创建到该 LDAP 帐户的链接。 |
.LOGIN_SCOPES | 对象 | 添加 Red Hat Quay 用来与 OIDC 供应商通信的其他范围。 |
.OIDC_ENDPOINT_CUSTOM_PARAMS | 字符串 |
支持 OIDC 端点上的自定义查询参数。支持以下端点: |
.OIDC_ISSUER | 字符串 |
允许用户定义签发者进行验证。例如,JWT 令牌容器( |
.OIDC_SERVER | 字符串 |
用于身份验证的 OIDC 服务器的地址。 |
.PREFERRED_USERNAME_CLAIM_NAME | 字符串 | 将首选 username 设置为来自令牌的参数。 |
.SERVICE_ICON | 字符串 | 更改登录屏幕上的图标。 |
.SERVICE_NAME | 字符串 |
要验证的服务名称。 |
.VERIFIED_EMAIL_CLAIM_NAME | 字符串 | 用于验证用户电子邮件地址的声明名称。 |
.PREFERRED_GROUP_CLAIM_NAME | 字符串 | OIDC 令牌有效负载中的密钥名称,其中包含用户组成员资格的信息。 |
.OIDC_DISABLE_USER_ENDPOINT | 布尔值 |
是否允许或拒绝 |
OIDC 示例 YAML
AUTHENTICATION_TYPE: OIDC # ... <oidc_provider>_LOGIN_CONFIG: CLIENT_ID: <client_id> CLIENT_SECRET: <client_secret> DEBUGLOG: true LOGIN_BINDING_FIELD: <login_binding_field> LOGIN_SCOPES: - openid - email - profile OIDC_ENDPOINT_CUSTOM_PARAMS: authorization_endpoint: some: "param" token_endpoint: some: "param" user_endpoint: some: "param" OIDC_ISSUER: <oidc_issuer_url> OIDC_SERVER: <oidc_server_address> PREFERRED_USERNAME_CLAIM_NAME: <preferred_username_claim> SERVICE_ICON: <service_icon_url> SERVICE_NAME: <service_name> VERIFIED_EMAIL_CLAIM_NAME: <verified_email_claim> PREFERRED_GROUP_CLAIM_NAME: <preferred_group_claim> OIDC_DISABLE_USER_ENDPOINT: true # ...
AUTHENTICATION_TYPE: OIDC
# ...
<oidc_provider>_LOGIN_CONFIG:
CLIENT_ID: <client_id>
CLIENT_SECRET: <client_secret>
DEBUGLOG: true
LOGIN_BINDING_FIELD: <login_binding_field>
LOGIN_SCOPES:
- openid
- email
- profile
OIDC_ENDPOINT_CUSTOM_PARAMS:
authorization_endpoint:
some: "param"
token_endpoint:
some: "param"
user_endpoint:
some: "param"
OIDC_ISSUER: <oidc_issuer_url>
OIDC_SERVER: <oidc_server_address>
PREFERRED_USERNAME_CLAIM_NAME: <preferred_username_claim>
SERVICE_ICON: <service_icon_url>
SERVICE_NAME: <service_name>
VERIFIED_EMAIL_CLAIM_NAME: <verified_email_claim>
PREFERRED_GROUP_CLAIM_NAME: <preferred_group_claim>
OIDC_DISABLE_USER_ENDPOINT: true
# ...
9.3.6. reCAPTCHA 配置字段
您可以在 Red Hat Quay 实例中启用 Recaptcha 支持,以帮助保护用户登录和帐户恢复表单被自动化系统滥用。
字段 | 类型 | 描述 |
---|---|---|
FEATURE_RECAPTCHA | 布尔值 |
用户登录和恢复需要 Recaptcha |
RECAPTCHA_SECRET_KEY | 字符串 | 如果启用了 recaptcha,则 Recaptcha 服务的 secret 键 |
RECAPTCHA_SITE_KEY | 字符串 | 如果启用了 recaptcha,则 Recaptcha 服务的站点键 |
reCAPTCHA 示例 YAML
# ... FEATURE_RECAPTCHA: true RECAPTCHA_SITE_KEY: "<site_key>" RECAPTCHA_SECRET_KEY: "<secret_key>" # ...
# ...
FEATURE_RECAPTCHA: true
RECAPTCHA_SITE_KEY: "<site_key>"
RECAPTCHA_SECRET_KEY: "<secret_key>"
# ...
9.3.7. JWT 配置字段
Red Hat Quay 可以配置为支持使用 JSON Web 令牌(JWT)进行外部身份验证。此集成允许第三方身份提供程序或令牌签发者通过调用处理令牌验证、用户查找和权限查询的特定端点来进行验证和授权用户。
字段 | 类型 | 描述 |
---|---|---|
JWT_AUTH_ISSUER | 字符串 |
JWT 用户的端点 |
JWT_GETUSER_ENDPOINT | 字符串 |
JWT 用户的端点 |
JWT_QUERY_ENDPOINT | 字符串 |
JWT 查询的端点 |
JWT_VERIFY_ENDPOINT | 字符串 |
JWT 验证的端点 |
JWT 示例 YAML
# ... JWT_AUTH_ISSUER: "http://192.168.99.101:6060" JWT_GETUSER_ENDPOINT: "http://192.168.99.101:6060/getuser" JWT_QUERY_ENDPOINT: "http://192.168.99.101:6060/query" JWT_VERIFY_ENDPOINT: "http://192.168.99.101:6060/verify" # ...
# ...
JWT_AUTH_ISSUER: "http://192.168.99.101:6060"
JWT_GETUSER_ENDPOINT: "http://192.168.99.101:6060/getuser"
JWT_QUERY_ENDPOINT: "http://192.168.99.101:6060/query"
JWT_VERIFY_ENDPOINT: "http://192.168.99.101:6060/verify"
# ...
9.3.8. 应用令牌配置字段
特定于应用的令牌允许用户使用基于令牌的凭证通过 Red Hat Quay 进行身份验证。这些字段对于 Docker 等 CLI 工具可能有用。
字段 | 类型 | 描述 |
---|---|---|
FEATURE_APP_SPECIFIC_TOKENS | 布尔值 |
如果启用,用户可以创建令牌以供 Docker CLI |
APP_SPECIFIC_TOKEN_EXPIRATION | 字符串 |
外部应用令牌的过期时间。 |
EXPIRED_APP_SPECIFIC_TOKEN_GC | 字符串 |
过期的外部应用程序令牌的持续时间将在垃圾回收前保留 |
应用程序令牌示例 YAML
# ... FEATURE_APP_SPECIFIC_TOKENS: true APP_SPECIFIC_TOKEN_EXPIRATION: "30d" EXPIRED_APP_SPECIFIC_TOKEN_GC: "1d" # ...
# ...
FEATURE_APP_SPECIFIC_TOKENS: true
APP_SPECIFIC_TOKEN_EXPIRATION: "30d"
EXPIRED_APP_SPECIFIC_TOKEN_GC: "1d"
# ...