我试图了解Silex的防火墙和安全访问规则如何与路径相关。这是否仅在您尝试通过登录表单访问时才有效?你能否使用api支票发回的规则(参见我工作过的Proper way to configure Silex Firewall to use api keys)。我希望能够在SecurityServiceProvider中设置它,如果可能的话,而不是在控制器中。
这可能吗?
编辑:添加安全防火墙部分..
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'unsecured' => array(
'pattern' => new RequestMatcher('^/api/brand/get'))
),
'security.access_rules' => array(
array('^/api/brand/get', 'ROLE_ADMIN'),
array('^/api/account/get', 'ROLE_ADMIN'),
array('^/.+$', 'ROLE_USER'),
array('^/', '')
)
));
答案 0 :(得分:1)
Symfony Security组件以双向步骤工作:身份验证和授权。
身份验证部分是指客户端告诉服务器他是谁(通常只有双方知道某些秘密,ej。密码,或者您的情况下是API令牌) 。当服务器检查凭证是否有效时,验证成功,然后是第二部分,即授权(通常在Web应用程序中,一旦客户端通过身份验证,验证信息就会存储在会话中,因此在以后的请求中客户端不需要再次发送凭据并遵循身份验证过程,但在API令牌身份验证过程中,通常客户端每次都需要发送API令牌,因此此处不涉及会话。)
正如我所说,一旦服务器验证客户端凭据,就会出现授权进程。在此过程的这一部分中,安全组件检查当前用户是否具有足够的权限来访问所请求的资源(URI)。这是在基于角色的模型中完成的,在进行身份验证时,用户将获得一些角色(默认情况下,经过身份验证的用户将获得IS_FULLY_AUTHENTICATED角色)。
现在你可能想知道,哇,这很好,但这又如何适合我的防火墙配置?这很简单,授权部分由 security.firewalls 配置条目决定,而授权部分由 security.access_rules 统治(这是一个简化,见下文)。
请注意,如果您的应用程序没有任何特殊授权规则(您只需要经过身份验证的用户并且没有特殊权限来访问不同的资源),那么您最好不使用任何访问规则(授权基于IS_FULLY_AUTHENTICATED仅限角色)。例如,您可能需要在管理面板中使用特定角色。
说了这么多,关于这两个步骤的真正酷的事情是每一步都与另一步是隔离的。您可以使用您想要的任何方法进行身份验证(用户/密码表单,HTTP基本身份验证,API令牌等等),授权仍然有效。
为了让事情更清楚(希望如此),请求是这样的:
所以回答你的问题: