coddin-web/idp-openid-connect-bundle

一个用于实现 OpenID Connect 的身份提供者(IdentityProvider)的 Symfony 扩展包

安装: 177

依赖: 0

建议者: 0

安全: 0

类型:symfony-bundle


README

Latest Version Build codecov

一个用于实现 OpenID Connect 的身份提供者(IdentityProvider)的 Symfony 扩展包

安装

请确保全局已安装 Composer,具体请参考 Composer 文档中的 安装章节

使用 Symfony Flex 的应用程序

打开命令行,进入项目目录并执行

$ composer require coddin-web/idp-openid-connect-bundle

不使用 Symfony Flex 的应用程序

步骤 1:下载 Bundle

打开命令行,进入项目目录并执行以下命令以下载此 Bundle 的最新稳定版本

$ composer require coddin-web/idp-openid-connect-bundle

步骤 2:启用 Bundle

然后,通过将其添加到项目 config/bundles.php 文件中注册的 Bundle 列表中启用该 Bundle

// config/bundles.php

return [
    // ...
    Coddin\IdentityProvider\CoddinIdentityProviderBundle::class => ['all' => true],
    // ...
];

请注意,此 Bundle 可以提供其他 Bundle(如 doctrine 和 messenger)的默认配置。为了使其正常工作,此 Bundle 应在其他 Bundle 之前注册。

此 Bundle 还附带了一个完全配置的安全配置。请确保它不会与您自己的安全配置冲突,或者跳过使用提供的配置,手动导入所需的内容。

配置此 Bundle

步骤 1:包含路由

此 Bundle 提供了 OpenIDConnect 流工作所需的路由,您可以通过以下方式导入它们

# config/routes.yaml
idp:
  resource: "@CoddinIdentityProviderBundle/config/routes.yaml"
  prefix: /

步骤 2:包含默认配置

注意:如果您决定自己配置某些 Bundle(如 DoctrineBundle 和 SecurityBundle 等),则可以跳过此步骤。

# config/packages/coddin_identity_provider.yaml
imports:
  - { resource: "@CoddinIdentityProviderBundle/config/config.yaml" }

请注意,在包含此配置时,您需要删除应用程序的安全.yaml 文件。

或者您可以按如下方式导入单个配置文件

# config/packages/coddin_identity_provider.yaml
imports:
  # ...
  - { resource: "@CoddinIdentityProviderBundle/config/packages/messenger.yaml" }

步骤 3:模板

模板需要由 Bundle 提供的资产,可以通过以下方式安装

bin/console assets:install --symlink

步骤 4:数据库

此 Bundle 需要特定的表才能使 OAuth 流工作。您可以通过运行 bin/console doctrine:schema:update --force(我建议不要这样做)在您的应用程序中“暴力”地强制执行它们,或者您可以在应用程序中运行 bin/console doctrine:migrations:diff 以创建更新应用程序所需的表的所需迁移。

步骤 5:缓存

在完全运行此模块之前,需要清除 Symfony 缓存。这可以通过以下方式完成: bin/console cache:clear 如果错误持续出现,请手动删除缓存:rm -rf var/cache/*

请在生产环境中小心操作

步骤 6:环境变量

此 Bundle 使用环境变量来配置某些方面

变量描述
IDP_ENCRYPTION_KEY此变量用作签名请求的加密密钥 <br/><br>此密钥应使用 ./vendor/bin/generate-defuse-key 生成
IDP_PUBLIC_KEY_PATHOAuth2 服务器需要公钥和私钥
IDP_PRIVATE_KEY_PATHOAuth2 服务器需要公钥和私钥
IDP_JWKS_PATH此变量应指向一个文件(例如) jwks.json,该文件包含用于 .well-known 端点的公钥信息 <br/><br>此文件的 内容可以通过以下命令生成:bin/console coddin:jwk:generate
IDP_HOST_URL此变量由路由器用于确定默认主机(例如,用于电子邮件模板)
IDP_SCHEME此变量由路由器用于确定默认方案(应为https,也是默认值)
TRUSTED_HOSTS此变量用于保护 introspect端点
COMPANY_NAME此变量用于自定义默认模板
IDP_MAIL_FROM此变量用作电子邮件的全局“来自”标题
MAILER_DSN这对于应用程序中的密码重置和一般邮件发送是必需的
MESSENGER_TRANSPORT_DSN这对于此包使用的异步过程是必需的

注意:公共/私有和jwk路径相对于项目目录

OAuth2密钥

此包在包的config/openidconnect/keys目录中包含密钥(OAuth2需要使用这些密钥来签名请求)。请勿在生产环境中使用这些密钥,但在构建期间替换它们。

对于新的(生产)服务器,可以通过运行两个openssl命令来生成这些密钥。

openssl genrsa -out private.key 2048
openssl rsa -pubout -in private.key -out public.key

!! 在ENV中设置这些文件很重要(见环境变量

消息队列/监督器

此包使用异步事件,以防止某些进程的故障中断阻塞最终用户。因此,需要运行一个消息队列。建议使用例如supervisor来运行Symfony的Messenger队列,如下所示:bin/console messenger:consume async

通过导入此包的配置(见步骤2),将为您配置消息。

调试/意外错误

在使用LibreSSL而不是OpenSSL时,Macbook上可能会出现意外错误。

MacOS预装了LibreSSL,但可以通过安装Homebrew中的openssl来替换。

支持的语言

默认情况下,此模块通过浏览器支持检测区域设置。

支持两种语言:荷兰语和英语

请随意通过提交Pull Request来贡献其他语言!

测试

此包使用PHPUnit进行单元和集成测试。

可以通过composer phpunit单独运行或通过完整的检查运行composer checkup

注意 集成测试需要一个数据库来运行。请参阅<.env.test>(可以被<.env.test.local>覆盖)以了解所需的配置。

检查

上述检查运行了多个对包代码的分析。这包括Squizlab的CodesnifferPHPStan覆盖率检查

持续集成

GitHub actions用于持续集成。如果您想了解更多信息,请查看配置文件

更改日志

请参阅项目更改日志

贡献

欢迎贡献。请参阅CONTRIBUTING.mdCODE_OF_CONDUCT.md以获取详细信息。

许可证

MIT许可(MIT)。请参阅许可文件获取更多信息。

致谢

此代码主要由Marius Posthumus开发并维护,用于Coddin的多个客户。

附加资源

https://github.com/steverhoades/oauth2-openid-connect-server - 此组件的核心

https://github.com/thephpleague/oauth2-server - OpenIDConnect服务器库的基础

https://tailwind.org.cn/ - 作为默认模板的基础