mlukman / securilex
Securilex 是为 Silex 提供的简化版安全服务提供商。
1.3.0
2020-06-28 14:12 UTC
Requires
- php: >=5.6.0
- silex/silex: ~1.3
- symfony/ldap: ^3.0
- symfony/security: ^3.4.26
Requires (Dev)
- phpunit/phpunit: 5.7
Suggests
- mlukman/securilex-doctrine: For loading users from database using Doctrine ORM
README
Securilex 是为 Silex 提供的简化版安全服务提供商。
Securilex 的主类是 \Securilex\SecurityServiceProvider
。
使用方法
// $app is instance of \Silex\Application
$app->register(new \Securilex\ServiceProvider());
// securilex is now a service
$app['securilex']-> ...
身份验证
身份验证通过登录机制识别用户身份。身份验证的主类是 \Securilex\Firewall
。
要定义防火墙,需要定义以下四项
- 要保护的路径:整个网站 (/) 还是特定区域 (/admin/)。
- 登录页面路径 = 可选,如果没有指定,则使用浏览器登录弹出窗口(即基本 HTTP 身份验证)。
- 身份验证工厂 = 身份验证方法,例如纯文本密码验证、编码密码验证、LDAP、OAuth 等。
- 用户提供者 = 获取用户列表的来源,例如硬编码、数据库等。
构建防火墙时,前两项是必需的
$firewall = new \Securilex\Firewall('/secure/', '/login/');
可以为同一个防火墙定义多个安全路径
$firewall = new \Securilex\Firewall(array('/secure/', '/admin/'), '/login/');
后两项需要传递给 addAuthenticationFactory
方法
$firewall->addAuthenticationFactory($authFactory, $userProvider);
使用 addFirewall()
方法将防火墙注册到 securilex
$app['securilex']->addFirewall($firewall);
身份验证工厂
身份验证工厂定义了用户凭据的验证方法。Securilex 提供了一些现成的身份验证工厂
- PlaintextPasswordAuthenticationFactory - 简单地将输入的密码与存储的纯文本密码进行比较。
- LdapBindAuthenticationFactory - 使用外部 LDAP 服务进行登录验证。
- InitializableAuthenticationFactory - 提供了在注册/重置密码后记住用户首次输入的密码的验证机制。需要实现
MutableUserProviderInterface
的用户提供者(将在下一节中进一步解释)。 - SimpleAuthenticationFactory - 将身份验证委托给实现了
SimpleAuthenticatorInterface
的另一个类。
您可以通过以下方式创建额外的工厂
- 实现
AuthenticationFactoryInterface
(LdapBindAuthenticationFactory
如此操作),或者 - 扩展
SimpleAuthenticationFactory
并实现SimpleAuthenticatorInterface
(PlaintextPasswordAuthenticationFactory
和InitializableAuthenticationFactory
如此操作)。
用户提供者
用户提供者提供有权访问相应防火墙的用户列表。Securilex 支持所有 Symfony 的现有用户提供者,同时它还提供了一些额外的用户提供者
- NoPasswordUserProvider - 当应用程序无法知道用户的密码时,例如在使用
LdapBindAuthenticationFactory
时。 - UserProviderSegmentalizer - 当需要将用户列表分段以由不同的身份验证工厂进行身份验证时。与定义具有略微不同参数的两个用户提供者并可能造成数据库或外部源的重余调用相比,使用分割器将在多个身份验证工厂进行身份验证时缓存用户数据。
授权
授权涉及允许或拒绝访问页面或资源。
// TODO: 进行中