flownative / openidconnect-neos
为 Neos CMS 设置 Open ID Connect (OIDC)
Requires
- flownative/openidconnect-client: ^3.0 || ^4.0 || ^5.0
- neos/neos: ^8.3 || ^9.0 || dev-main
README
Neos CMS 的 OpenID Connect
此包为 Neos 提供了一个 OpenID Connect (OIDC) "桥接器"。
它为 OIDC 客户端包提供了合理的默认值,并提供了一种将 Neos 后端用户与 OIDC 用户匹配的方法。如果用户尚不存在,可以选择动态创建用户。
术语和背景
在部署 OpenID Connect 应用程序之前,您应该熟悉这些概念。为了快速回顾,您应该阅读 Flownative.OpenIdConnect.Client 的文档。
要求
为了使用此插件,您需要
- Neos CMS
- 一个提供自动发现的 OIDC 身份提供者
安装
此插件通过 Composer 安装
composer require flownative/openidconnect-neos
配置
此包为大多数配置提供了合理的默认值,适用于 Neos CMS。
必须设置 OIDC 提供者的连接。默认配置使用以下环境变量
OIDC_DISCOVERY_URI
OIDC_CLIENT_ID
OIDC_CLIENT_SECRET
当然,您可以直接设置这些值
Flownative: OpenIdConnect: Client: services: neos: options: discoveryUri: '…' clientId: '…' clientSecret: '…'
您必须设置如何确定角色,请参阅下一节。
角色
硬编码的角色
您可以按照以下方式配置提供者
Neos: Flow: security: authentication: providers: 'Neos.Neos:Backend': providerOptions: roles: - 'Neos.Neos:Editor'
这是配置角色的最简单方式,但也很“静态”,不可变。
从身份令牌中获取的角色
提供者可以从身份令牌值中提取角色。令牌提供的角色必须与 Neos 中的标识符相同。
鉴于身份令牌提供了一个名为 "https://flownative.com/roles" 的声明,您可以按照以下方式配置提供者
Neos: Flow: security: authentication: providers: 'Neos.Neos:Backend': providerOptions: rolesFromClaims: - 'https://flownative.com/roles'
当用户登录并且她的身份令牌有一个包含 Flow 角色标识符数组的 "https://flownative.com/roles" 值时,OpenID Connect 提供者将自动分配这些角色。
如果角色的值与所需的 Flow 角色模式不匹配(<Package-Key>:<Role>
),或者如果多个角色应转换为单个角色,则可以进行角色映射
Neos: Flow: security: authentication: providers: 'Neos.Neos:Backend': providerOptions: rolesFromClaims: - name: 'https://flownative.com/roles' mapping: 'role1': 'Some.Package:SomeRole1' 'role2': 'Some.Package:SomeOtherRole' 'role3': 'Some.Package:SomeRole'
您可以指定多个声明名称,所有这些名称都应考虑用于编译角色列表。
如果事情没有按预期工作,请检查日志以获取提示。
从现有账户中获取的角色
如果您使用本地创建的 Neos 用户(由身份令牌提供的同一用户名的账户),则可以使用该(持久化)账户的角色
Neos: Flow: security: authentication: providers: 'Neos.Neos:Backend': providerOptions: addRolesFromExistingAccount: true
您可以将 "rolesFromClaims" 与 "addRolesFromExistingAccount" 混合使用。在这种情况下,声明和现有账户的角色将合并。
再次,如果事情没有按预期工作,请检查日志以获取提示。
为自动创建的 Neos 用户设置角色
如果启用了用户自动创建,可以通过配置设置新用户上的角色
Flownative: OpenIdConnect: Neos: autoCreateUser: true rolesForAutoCreatedUser: - 'Neos.Neos:Editor'
请注意,您仍然必须使用(至少)一种选项来分配角色,即 "rolesFromClaims" 和 "addRolesFromExistingAccount"。
可选设置
如果您需要使用不同的名称,则可以设置 JWT cookie 名称。
Neos: Flow: security: authentication: providers: 'Neos.Neos:Backend': providerOptions: jwtCookieName: 'flownative_oidc_jwt'
如果您的 OpenID Connect 提供者不返回 username
,您可以按如下方式映射它
Flownative: OpenIdConnect: Neos: identityValueMapping: 'username': 'email'
到目前为止,这个假设是在本地创建与OIDC提供者返回的相同用户名的Neos用户。您可以通过以下方式启用Neos用户的自动创建
Flownative: OpenIdConnect: Neos: autoCreateUser: true identityValueMapping: 'firstname': 'https://flownative.com/given_name' 'lastname': 'https://flownative.com/family_name'
如果OIDC提供者不按这些名称返回,则需要映射firstname
和lastname
。它们用于创建的用户。如果身份令牌包含在单个属性中的名字和姓氏,您可以使用“name”映射
Flownative: OpenIdConnect: Neos: autoCreateUser: true identityValueMapping: 'name': 'https://flownative.com/given_name_and_family_name'
调试
- 检查安全和系统日志中的消息,那里可能有一些有用的信息。
- 使用
./flow configuration:show --path Flownative.OpenIdConnect
来检查设置,并查找您可能需要调整的内容。 - 使用
Neos.Flow.security
设置重复该步骤。
致谢与支持
此库由Karsten Dambekalns / Flownative开发。请随时在我们的GitHub项目中建议新功能、报告错误或提供错误修复。
感谢Daniel Lienert / punkt.de为AccountManager
类的初始实现。