niif/shibboleth-user-provider-bundle

shibboleth bundle 通用 UserProvider 包

安装: 4

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 6

分支: 1

开放问题: 0

类型:symfony-bundle

dev-master 2016-03-03 10:27 UTC

This package is auto-updated.

Last update: 2024-09-08 02:07:48 UTC


README

该包根据 SAML 权限属性在 $_SERVER 变量中为认证用户提供角色。

您可以定义用于 ROLE_ADMIN、ROLE_USER、ROLE_GUEST 和从权限值获得的 ROLE_whatever 的正则表达式。

然后您可以像 symfony 一样实现访问控制。

安装

将以下行添加到 composer.json

...
 "repositories": [
        {
            "type": "vcs",
            "url":  "git@dev.niif.hu:gyufi/shibbolethuserproviderbundle.git"
        }
    ],
...

安装包

composer require niif/shibboleth-user-provider-bundle

更新 app/AppKernel.php

$bundles = array(
            ...
            new KULeuven\ShibbolethBundle\ShibbolethBundle(),
            new Niif\ShibbolethUserProviderBundle\NiifShibbolethUserProviderBundle(),
            ...
        );

根据https://github.com/rmoreas/ShibbolethBundle 中的说明配置 shibboleth bundle。

配置用户提供者。

  • entitlement_serverparameter,$_SERVER 数组的键,包含用户角色值。 必需
  • entitlement_prefix,角色的前缀,例如 urn:geant:niif.hu:hexaa:40: 必需
  • generate_custom_roles,使用权限值生成角色,例如从 urn:geant:niif.hu:hexaa:40:customer 权限值生成 ROLE_customer。默认是 FALSE
  • custom_role_prefix,如果存在,自定义角色的前缀。例如 urn:geant:niif.hu:hexaa:40:org:sztaki 的前缀是 org:,角色将是:ROLE_sztaki。默认 ""
  • custom_additional_role,如果存在,则用户具有自定义角色时,将采用的角色,通常是 ROLE_USER。默认:ROLE_USER
  • admin_role_regexp,ROLE_ADMIN 的值。默认是 /^admin$/
  • user_role_regexp,ROLE_USER 的值。默认是 /^user$/
  • guest_role_regexp,ROLE_GUEST 的值。默认是 /^guest$/

更新您的 app/config/config.yml

...
niif_shibboleth_user_provider:
    entitlement_serverparameter: %shibboleth_user_provider_entitlement_serverparameter%
    entitlement_prefix: %shibboleth_user_provider_entitlement_prefix%
    generate_custom_roles: %shibboleth_user_provider_generate_custom_roles%
#    custom_role_prefix: %shibboleth_user_provider_custom_role_prefix%
#    custom_additional_role: %shibboleth_user_provider_custom_additional_role%
#    admin_role_regexp: %shibboleth_user_provider_admin_role_regexp%
#    user_role_regexp: %shibboleth_user_provider_user_role_regexp%
#    guest_role_regexp: %shibboleth_user_provider_guest_role_regexp%
...
  custom_additional_role:  true

                           entitlement_prefix          the value
                        |-------------------------|    |------|
value from federation:  urn:geant:niif.hu:hexaa:40:org:customer
                                                   |--|
                                            custom_role_prefix
The result:
  {ROLE_customer}
  

app/config/parameters.yml

parameters
    ...
    shibboleth_user_provider_entitlement_serverparameter: edupersonentitlement
    shibboleth_user_provider_entitlement_prefix: urn:oid:
    shibboleth_user_provider_generate_custom_roles: true
    ...

app/config/security.yml

    ...
    providers:
        ...
        shibboleth:
            id: shibboleth.user.provider
        ...
    ...
    firewalls:
        ...            
        secured_area:
            pattern:    ^/
            shibboleth: true
            logout:
                path: /logout
                target: https://www.example.com/logged_out
                success_handler: security.logout.handler.shibboleth
        ...

在开发环境中模拟 shibboleth 认证

当您开发应用程序时,无论如何都应该模拟 shibboleth 认证。您可以在启用 headersenv 模块后,在 apache 配置中完成此操作。

        Alias /my_app /home/me/my_app/web
        <Directory /home/me/my_app/web>
           Options Indexes FollowSymLinks
           AllowOverride All
           Require all granted           
           SetEnv Shib-Person-uid myuid
           SetEnv Shib-EduPersonEntitlement urn:oid:whatever
           RequestHeader append Shib-Identity-Provider "fakeIdPId"
           RequestHeader append eppn "myeppn"
        </Directory>