【问题标题】:REST API web security without multiple users没有多个用户的 REST API 网络安全
【发布时间】:2020-09-18 22:28:35
【问题描述】:

我从未构建过 REST API,所以, 我的想法是:我有一个 SQL 数据库,它有一个带有名称和描述的表(对于这个例子,它是汽车名称,它的描述有点简单)我想创建一个 REST API,因此将来可以使用它应用。我以为我会在 php 中做到这一点,现在我的问题是让我能够访问这个我必须使用 url 访问的其余 api,这将以 json 形式返回结果。但是这样做是为了只有我的网站可以使用它(在这个例子中,我在 reactjs 中开发它)而不是任何其他没有授权的网站。我对JWT有所了解,但是不知道有没有标明,这个网页没有用户,只是给你看这些“产品”,我看了一些关于oauth 2.0的东西,不知道是不是这个我在想。

【问题讨论】:

    标签: javascript php reactjs api oauth-2.0


    【解决方案1】:

    https://blog.restcase.com/4-most-used-rest-api-authentication-methods/

    基本身份验证可能是最简单的。只需谷歌 PHP 基本身份验证 REST API 实现

    在 php.net 的 cmets https://www.php.net/manual/en/features.http-auth.php 中有一个非常基本的旧示例

    <?php
    
    $valid_passwords = array ("mario" => "carbonell");
    $valid_users = array_keys($valid_passwords);
    
    $user = $_SERVER['PHP_AUTH_USER'];
    $pass = $_SERVER['PHP_AUTH_PW'];
    
    $validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
    
    if (!$validated) {
      header('WWW-Authenticate: Basic realm="My Realm"');
      header('HTTP/1.0 401 Unauthorized');
      die ("Not authorized");
    }
    
    // If arrives here, is a valid user.
    echo "<p>Welcome $user.</p>";
    echo "<p>Congratulation, you are into the system.</p>";
    
    ?>
    

    但是上面没有使用数据库来存储用户登录/哈希密码,它只是将它存储在一个数组中。但是在使事情变得更复杂之前,可以很快地对您的身份验证进行原型设计

    这是另一个类似的基本示例 https://gist.github.com/rchrd2/c94eb4701da57ce9a0ad4d2b00794131

    因此,使用此设置,如果您向 REST API 端点发送 GET 请求以获取 json,您还需要在 Http 请求标头中包含用户名/密码,否则您将获得 401 未授权响应而不是 JSON。

    请参阅此处的答案,了解如何编写来自 PHP 的 GET 请求以调用 REST 端点 How do I make a request using HTTP basic authentication with PHP curl? 或者这里也有很好的例子PHP: how to make a GET request with HTTP-Basic authentication

    【讨论】:

    • 这不是通过 url 传递“参数”吗?浏览器中的开发人员工具仍然看不到?
    • @MAGICK 否,Basic Auth 在请求头中传输:Authorization: Basic bG9sOnNlY3VyZQ==
    • 对,如果您通过 URL 传递参数,我也应该说 GET 请求。我正在编辑答案
    • 这取决于你想做什么,你想从 URL 中获取参数以获取汽车详细信息,例如example.com/?carColour=red&carDescription=Big 或者您想使用 POST 参数发送它,都可以。通常 REST API 端点将通过 URL 传递参数,并在 HTTP 标头中使用 Basic Auth
    • 像我评论的那种网站,根据你传给我的那篇文章,最推荐的是oauth2吧?
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 2019-11-25
    • 2016-06-18
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2012-03-06
    相关资源
    最近更新 更多