abel/keycloak-bearer-only-adapter-bundle

仅支持Bearer的Keycloak安全适配器

v1.3.2 2023-02-20 13:28 UTC

This package is auto-updated.

Last update: 2024-09-20 16:46:27 UTC


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与此包一起工作,请在此处查看基本配置的逐步文档

兼容性