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 |
authentication_backend.ldap.group_name_attribute |
authentication_backend.ldap.attributes.group_name |
authentication_backend.ldap.username_attribute |
authentication_backend.ldap.attributes.username |
authentication_backend.ldap.mail_attribute |
authentication_backend.ldap.attributes.mail |
authentication_backend.ldap.display_name_attribute |
authentication_backend.ldap.attributes.display_name |
authentication_backend.ldap.url |
authentication_backend.ldap.address |
需要注意的配置项
本次版本更新主要是字段位置的变化和字段的合并。也有格式更改和新添加的字段。这里有三处需要注意重新配置的。
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 }}
详见:
- https://www.authelia.com/configuration/identity-providers/openid-connect/provider/#jwks
- https://www.authelia.com/reference/guides/generating-secure-values/#generating-an-rsa-self-signed-certificate
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_secret
在4.38.x中内容需要加密。
实际发现当token_endpoint_auth_method
为client_secret_basic
的时候明文也可以(但有warning),为client_secret_post
的时候填写明文不行。
估计client_secret_jwt
和private_key_jwt
也需要密文,没有进行测试。最好都填写为密文,加密方式如下:
docker run authelia/authelia:latest \
authelia crypto hash generate pbkdf2 --variant sha512 --random --random.length 72 --random.charset rfc3986
将原有明文加密
docker run authelia/authelia:4.38.9 \
authelia crypto hash generate -c /config/configuration.yml --password <明文client_secret>
详见:
- 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