簡體   English   中英

使用Silex和Symfony 3配置LDAP身份驗證

[英]Configuring LDAP authentication with Silex and Symfony 3

我正在嘗試使用Symfony(3.0.1)提供的LDAP組件在我的Silex(1.3.5)應用程序中配置LDAP身份驗證。 這是我目前的配置:

$app['ldap'] = function () {
    return new Symfony\Component\Ldap\LdapClient('ldap.example.com');
};

$app->register(new SecurityServiceProvider(), [
    'security.providers' => [
        'users' => [
            'ldap' => [
                'service' => 'ldap',
                'base_dn' => 'dc=example,dc=com',
                'search_dn' => 'CN={username},OU=DEV,DC=example,DC=com',
            ],
        ],
    ],
    'security.firewalls' => [
        'stats' => [
            'pattern' => '^/',
            'provider' => 'users',
            'http' => true,
            'stateless' => true,
            'http_basic_ldap' => [
                'service' => 'ldap',
                'dn_string' => '{username}@example.com',
            ],
        ],
    ],
]);

但是通過上面的配置,我得到以下異常:

致命錯誤:未捕獲的異常'LogicException',消息''“提供者”認證條目未注冊。 在/var/www/my-site/vendor/silex/silex/src/Silex/Provider/SecurityServiceProvider.php:243堆棧跟蹤:#0 / var / www / my-site / vendor / pimple / pimple / lib / Pimple .php(126):Silex \\ Provider \\ SecurityServiceProvider-> Silex \\ Provider {closure}(Object(Silex \\ Application))#1 /var/www/my-site/vendor/pimple/pimple/lib/Pimple.php( 83):Silex \\ Application :: {closure}(Object(Silex \\ Application))#2 /var/www/my-site/vendor/silex/silex/src/Silex/Provider/SecurityServiceProvider.php(150):Pnmple - > offsetGet('security.firewa ...')#3 /var/www/my-site/vendor/pimple/pimple/lib/Pimple.php(126):Silex \\ Provider \\ SecurityServiceProvider-> Silex \\ Provider { closure}(Object(Silex \\ Application))#4 /var/www/my-site/vendor/pimple/pimple/lib/Pimple.php(83):Silex \\ Application :: {closure}(Object(Silex \\ Application) ))#5 /var/www/my-site/vendor/silex/silex/src/Silex/Provider/SecurityServiceProvider.php(584):在/ var / www / my-site / vendor / silex / silex / src /第243行的Silex / Provider / SecurityServiceProvider.php

有沒有什么可以使LDAP組件與Silex一起使用? 或者我錯過了一些配置? 我沒有找到該組件的任何文檔......

否則,Silex安全配置會起作用。
用戶提供程序定義為$app['security.user_provider.%firewall_name%'] ,而不是防火牆配置中的provider密鑰。

嘗試將您的配置更改為:

$app['ldap'] = $app->share(function() {
    return new Symfony\Component\Ldap\LdapClient('ldap.example.com');
});

$app['security.user_provider.stats'] = $app->share(function($app) {
    return new \Symfony\Component\Security\Core\User\LdapUserProvider(
        $app['ldap'],
        'dc=example,dc=com',
        null,
        null,
        ['ROLE_USER'],
        'CN'
    );
});

$app['security.authentication_provider.stats.dao'] = function () use ($app) {
    return new \Symfony\Component\Security\Core\Authentication\Provider\LdapBindAuthenticationProvider(
        $app['security.user_provider.stats'],
        $app['security.user_checker'],
        'stats',
        $app['ldap'],
        'CN={username},OU=DEV,DC=example,DC=com',
        $app['security.hide_user_not_found']
    );
};

$app->register(new Silex\Provider\SecurityServiceProvider(), [
    'security.firewalls' => [
        'stats' => [
            'pattern' => '^/',
            'http' => true,
            'stateless' => true,
        ],
    ],
]);

更新:或者更好地使用此決定Symfony LDAP auth bind與用戶名和密碼 我認為它更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM