flownative/openidconnect-neos

为 Neos CMS 设置 Open ID Connect (OIDC)

安装数量: 8,152

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 4

分支: 3

开放问题: 3

类型:neos-package

v0.4.0 2024-05-03 15:36 UTC

This package is auto-updated.

Last update: 2024-09-03 16:20:57 UTC


README

MIT license Packagist Maintenance level: Love

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提供者不按这些名称返回,则需要映射firstnamelastname。它们用于创建的用户。如果身份令牌包含在单个属性中的名字和姓氏,您可以使用“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类的初始实现。