首页 文章

在URL中使用基本身份验证的Laravel-App:适用于Web,不适用于API

提问于
浏览
0

我尝试在HTTP基本身份验证用户/密码对话框后面运行Koel(或Kutr,一个分支):在启用基本身份验证的nginx反向代理https://koel后面https://koel:8001 .

Koel是一个Laravel应用程序,它使用JWT标记和 Authorization Header字段,如下所示:

Authorization: Bearer eyJ0eX…

这意味着每个请求都会覆盖基本的auth标头(使用相同的字段),并且会一次又一次地弹出登录对话框 .

当我将文件.env中的APP_URL设置为https://user:pass@koel时,确实正确获取了所有指向静态文件的链接 . 不幸的是,像https://koel/api/data这样的API调用忽略了这一点 .

我可以使用某种中间件将用户和密码注入API调用吗?

1 回答

  • 0

    JWT的原则是避免使用基本身份验证,这种身份验证完全没有身份验证(您的凭据通过基本身份验证进行了明确传输) .

    所以,我会说使用 Authorization 的JWT是一件好事,因为它可以防止你的凭证在配置错误的情况下泄漏 .

    JWT的原则是,在有效凭证时,生成存储在浏览器中的令牌(有点像cookie) . 然后,使用此令牌,无需提供任何身份验证(因此凭据仅在身份验证时出现一次,在完整会话期间不出现,如基本或摘要身份验证) .

    使用Koel,您无法阻止此操作,因为无法更改登录页面以使用基本身份验证 .

    然而,对于Kutr,我已经完成了一些挂钩机制,因此您可以插入自己的登录页面(这可以像验证基本身份验证一样简单) .

    它可用here

    在您的情况下,替换文件的顶部:

    // Require your CMS bootstrap code here
    require_once("yourCMSbootstrap.php");
    // Bootstrap your CMS and check the session is valid (if not your CMS will fallback the login screen)
    checkSession();
    

    // Assert the user provided an basic or digest authentication
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
        header('WWW-Authenticate: Basic realm="My Realm"');
        header('HTTP/1.0 401 Unauthorized');
        echo 'Text to send if user hits Cancel button';
        exit();
    } else {
        $login = $_SERVER['PHP_AUTH_USER'];
        $pw = $_SERVER['PHP_AUTH_PW'];
        if (!checkValidLoginAndPW($login, $pw))
        {
            header('HTTP/1.0 401 Unauthorized');
            echo 'Game over';
            exit();
        }
    }
    

    确保用户的登录名也存在于Kutr的应用程序中

相关问题