Authelia4.37.x升级4.38.x的配置变化

前段时间发现Authelia开始更新了,最后发布还是在2022年(4.37.5)。今年发布的版本也是一个较大版本的更新(4.38.x), 配置文件变化了许多,不能直接由4.37.x升级到4.38.x。需要先更新配置文件。

配置变化对照

4.37.x 4.38.x
jwt_secret identity_validation.reset_password.jwt_secret
server.enable_pprof server.endpoints.enable_pprof
server.enable_expvars server.endpoints.enable_expvars
server.host
server.port
server.path
server.address
default_redirection_url session.cookies[].authelia_url
session.domain session.cookies[].domain
notifier.smtp.host
notifier.smtp.port
notifier.smtp.address
identity_providers.oidc.issuer_private_key identity_providers.oidc.jwks[].key_id
identity_providers.oidc.jwks[].algorithm
identity_providers.oidc.jwks[].use
identity_providers.oidc.jwks[].key
identity_providers.oidc.jwks[].certificate_chain
identity_providers.oidc.access_token_lifespan identity_providers.oidc.lifespans.access_token
identity_providers.oidc.authorize_code_lifespan identity_providers.oidc.lifespans.authorize_code
identity_providers.oidc.id_token_lifespan identity_providers.oidc.lifespans.id_token
identity_providers.oidc.refresh_token_lifespan identity_providers.oidc.lifespans.refresh_token
identity_providers.oidc.clients[].id identity_providers.oidc.clients[].client_id
identity_providers.oidc.clients[].description identity_providers.oidc.clients[].client_name
identity_providers.oidc.clients[].secret identity_providers.oidc.clients[].client_secret
  identity_providers.oidc.clients[].token_endpoint_auth_method

需要注意的配置项

本次版本更新主要是字段位置的变化和字段的合并。也有格式更改和新添加的字段。这里有三处需要注意重新配置的。

1.notifier.smtp.address

该配置不是直接拼接4.37.x的host和port,还需要根据是否启用TLS来添加协议前缀(smtp, submission, or submissions)。如

notifier:
  smtp:
    address: 'smtp://127.0.0.1:25'
# 或者
notifier:
  smtp:
    address: 'submissions://[fd00:1111:2222:3333::1]:465'

详见:https://www.authelia.com/configuration/notifications/smtp/#address

2.identity_providers.oidc.jwks[]

该配置将issuer_private_key变为了多个jwks。可以配置多个证书

identity_providers:
  oidc:
    hmac_secret: 'this_is_a_secret_abc123abc123abc'
    jwks:
      - key_id: 'example'
        algorithm: 'RS256'
        use: 'sig'
        key: |
          -----BEGIN RSA PRIVATE KEY-----
          ...
          -----END RSA PRIVATE KEY-----          
        certificate_chain: |
          -----BEGIN CERTIFICATE-----
          ...
          -----END CERTIFICATE-----
          -----BEGIN CERTIFICATE-----
          ...
          -----END CERTIFICATE-----  

通过openssl 生成key(key.pem)和certificate_chain(cert.pem),可以根据实际修改过期时间和域名。

openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -subj '/CN=example.com'

我看官方文档示例可以直接引用文件,但实际我测试报错,还是直接粘贴证书文件中的内容吧

# 测试了一下,这样配置报错
identity_providers:
  oidc:
    jwks:
      - key: {{ secret "/config/secrets/oidc/jwks/rsa.2048.key" | mindent 10 "|" | msquote }}

详见:

3.identity_providers.oidc.clients[]

token_endpoint_auth_method这个配置是4.38.x新增加的。 大多数情况按默认配置client_secret_basic就可以,但也不是都行,比如Outline需要配置为client_secret_post,这个也是我自己根据日志摸索出来的。 token_endpoint_auth_method支持4种选项:client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, and none。

详见:https://www.authelia.com/configuration/identity-providers/openid-connect/clients/#token_endpoint_auth_method

另外与其相关的client_secret4.38.x中内容需要加密。 实际发现当token_endpoint_auth_methodclient_secret_basic的时候明文也可以(但有warning),为client_secret_post的时候填写明文不行。 估计client_secret_jwtprivate_key_jwt也需要密文,没有进行测试。最好都填写为密文,加密方式如下:

docker run authelia/authelia:latest \ 
    authelia crypto hash generate pbkdf2 --variant sha512 --random --random.length 72 --random.charset rfc3986

详见:

  • https://www.authelia.com/configuration/identity-providers/openid-connect/clients/#client_secret
  • https://www.authelia.com/integration/openid-connect/frequently-asked-questions/#how-do-i-generate-a-client-identifier-or-client-secret