coddin-web / idp-openid-connect-bundle
一个用于实现 OpenID Connect 的身份提供者(IdentityProvider)的 Symfony 扩展包
Requires
- php: >=8.1
- beberlei/assert: ^3.3
- doctrine/doctrine-bundle: ^2.7
- doctrine/orm: ^2.12
- guzzlehttp/guzzle: ^7.4
- league/flysystem: ^3.0
- league/oauth2-server: ^8.3
- nyholm/psr7: ^1.5
- ramsey/uuid: ^4.3
- steverhoades/oauth2-openid-connect-server: ^2.4
- symfony/framework-bundle: ^6.1
- symfony/mailer: ^6.1
- symfony/messenger: ^6.1
- symfony/psr-http-message-bridge: ^2.1
- symfony/security-bundle: ^6.1
- symfony/security-csrf: ^6.1
- symfony/serializer-pack: ^1.1
- symfony/translation: ^6.1
- symfony/twig-bundle: ^6.1
- symfony/ux-twig-component: ^2.3
- symfony/validator: ^6.1
- thecodingmachine/safe: ^2.2
Requires (Dev)
- dama/doctrine-test-bundle: ^7.0
- dg/bypass-finals: ^1.3
- doctrine/doctrine-fixtures-bundle: ^3.4
- phpstan/phpstan: ^1.2
- phpstan/phpstan-phpunit: ^1.0
- phpstan/phpstan-strict-rules: ^1.1
- phpstan/phpstan-symfony: ^1.2
- phpunit/phpunit: ^9.5
- rregeer/phpunit-coverage-check: ^0.3.1
- slevomat/coding-standard: ^7.0
- squizlabs/php_codesniffer: ^3.6
- symfony/console: ^6.1
- symfony/doctrine-messenger: ^6.1
- symfony/dotenv: ^6.1
- symfony/expression-language: ^6.1
- symfony/runtime: ^6.1
- symfony/stopwatch: 6.0.*
- symfony/webpack-encore-bundle: ^1.15
- symfony/yaml: ^6.1
README
一个用于实现 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_PATH | OAuth2 服务器需要公钥和私钥 |
IDP_PRIVATE_KEY_PATH | OAuth2 服务器需要公钥和私钥 |
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的Codesniffer、PHPStan和覆盖率检查。
持续集成
GitHub actions用于持续集成。如果您想了解更多信息,请查看配置文件。
更改日志
请参阅项目更改日志
贡献
欢迎贡献。请参阅CONTRIBUTING.md和CODE_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/ - 作为默认模板的基础