abel / keycloak-bearer-only-adapter-bundle
仅支持Bearer的Keycloak安全适配器
v1.3.2
2023-02-20 13:28 UTC
Requires
- php: >=7.2.5
- ext-json: *
- guzzlehttp/guzzle: ^6.3
- symfony/config: ^6.0
- symfony/dependency-injection: ^6.0
- symfony/http-kernel: ^6.0
- symfony/security-bundle: ^6.0
README
此Symfony包是一个适配器,允许使用Keycloak Bearer Only客户端来保护API。
安装
在安装包之前,可以通过以下命令激活自动包配置
composer config extra.symfony.allow-contrib true
使用composer
composer require abel/keycloak-bearer-only-adapter-bundle
配置
如果您想本地设置Keycloak,可以在此处下载它并遵循官方文档中的说明。
包配置
通过配方(自动)
此包有一个Symfony配方,允许通过Symfony Flex Composer插件自动化配置。要为您的项目启用配方,请运行以下命令
composer config extra.symfony.allow-contrib true
手动
如果您在本地或Docker中已经运行了Keycloak,并且已经为客户端配置了访问类型 = bearer-only,以下是要使用的配置
# config/packages/abel_keycloak_bearer_only_adapter.yaml abel_keycloak_bearer_only_adapter: issuer: '%env(OAUTH_KEYCLOAK_ISSUER)%' # your accessible keycloak url realm: '%env(OAUTH_KEYCLOAK_REALM)%' # your keycloak realm name client_id: '%env(OAUTH_KEYCLOAK_CLIENT_ID)%' # your keycloak client id client_secret: '%env(OAUTH_KEYCLOAK_CLIENT_SECRET)%' # your keycloak client secret #ssl_verification: False # by default ssl_verification is set to False
最佳实践是从.env文件加载配置。
# .env
...
###> Abel_keycloak_bearer_only_adapter ###
OAUTH_KEYCLOAK_ISSUER=keycloak:8080
OAUTH_KEYCLOAK_REALM=my_realm
OAUTH_KEYCLOAK_CLIENT_ID=my_bearer_client
OAUTH_KEYCLOAK_CLIENT_SECRET=my_bearer_client_secret
###< Abel_keycloak_bearer_only_adapter ###
...
由于Keycloak 17版本起,默认发行版现在由Quarkus提供支持,而由传统WildFly提供的发行版将一直存在,直到2022年6月
新的发行版引入了一些重大更改,包括
/auth
从默认上下文路径中删除
⚠️ 如果您使用的是旧版本,请确保将/auth包含在OAUTH_KEYCLOAK_ISSUER中
示例:keycloak:8080/auth
如果您在本地使用Docker运行Keycloak,请将issuer值替换为您的keycloak容器在网络中的引用
例如,您可以使用服务名称或通过此命令获取的容器IPAdresse
docker inspect <container id> | grep "IPAddress"
Symfony安全配置
要使用Keycloak保护您的API,您必须更改symfony中的默认安全配置。
以下是一个简单的配置,仅允许具有角色ROLE_API的用户访问/api/*
路由
# config/packages/security.yaml security: enable_authenticator_manager: true providers: keycloak_bearer_user_provider: id: ABEL\Bundle\keycloakBearerOnlyAdapterBundle\Security\User\KeycloakBearerUserProvider firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false api: pattern: ^/api/ provider: keycloak_bearer_user_provider custom_authenticators: - ABEL\Bundle\keycloakBearerOnlyAdapterBundle\Security\Authenticator\KeycloakBearerAuthenticator stateless: true access_control: - { path: ^/api/, roles: ROLE_API }
ℹ️ 参考Symfony 文档,角色必须以ROLE_开头(否则,事情可能不会按预期工作)
Keycloak配置
要配置Keycloak与此包一起工作,请在此处查看基本配置的逐步文档。