【问题标题】:Typo3 - protect controller action with htaccessTypo3 - 使用 htaccess 保护控制器操作
【发布时间】:2014-02-27 16:21:56
【问题描述】:

有没有办法对typo3中的特定控制器(动作)进行密码保护? 我想提供一个包含在标准控制器中的基本 REST 服务,但它不应该对每个人都可以访问,而只有知道用户/通行证的人才能访问。

【问题讨论】:

    标签: .htaccess controller action typo3 extbase


    【解决方案1】:

    与 TYPO3 Flow 相比,Extbase 不包含安全框架。因此,默认情况下,每个人都可以访问每个操作(即插件操作列表中的操作)。

    您有多种可能限制 TYPO3 方面的访问,但由于我不知道您如何使用 REST 服务和处理身份验证(您应该在问题中添加更多详细信息!)很难选择正确的一个。

    如果内容是通过 Fluid 交付的,您可以使用 Fluid 安全 ViewHelpers,其工作方式类似于 if 条件:

    <f:security.ifHasRole [...]
    <f:security.ifAuthenticated [...]
    

    但很可能你不是。在控制器上下文中,我建议在控制器中添加一个用户组检查功能并在执行控制器操作之前调用它:

    /**
     * Checks if the current user is a certain group
     *
     * @return void
     */
    public function checkUserHasPermission() {
    
        if (in_array($this->settings['allowedFeUserGroup'], $GLOBALS['TSFE']->fe_user->groupData['uid'])) {
            $this->userIsAdmin = TRUE;
        }
    
    }
    

    然后您将一个组添加到允许的前端用户并在您的设置中定义它。如果用户没有权限,则拒绝访问(并可能重定向到登录)。

    【讨论】:

    • 我希望此功能用于单点登录与第二个站点的集成。我通过 curl 使用了 http 身份验证。会话 cookie 设置在与第二个站点相同的域上,以便它可以读取会话 ID。然后,该站点向typo3 控制器发出请求,传递会话ID,然后控制器决定它是否是有效会话。如果是,则返回用户名,因此用户在第二个站点上登录(两个站点上的用户名相同)。我在typo3 的sys_registry 表中设置了api 凭据(http 用户/通行证),并将它们与通过curl 收到的凭据进行核对。
    【解决方案2】:

    一种方法是使用您的特定控制器网址,例如

    SetEnvIf Host "www\.your-link\.com/index.php?query" is_on_protected_site
    Order deny,allow
    Deny from env=is_on_protected_site
    Satisfy any
    
    AuthType Basic
    AuthName "Access"
    AuthUserFile /path/to/.htpasswd
    Require valid-user
    

    【讨论】:

      猜你喜欢
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多