【问题标题】:Rest API how to authentication via Basic Auth?Rest API 如何通过 Basic Auth 进行身份验证?
【发布时间】:2016-03-19 09:51:05
【问题描述】:

我想创建带有基本授权的 RESTful API。

我如何在 php 中做到这一点?我怎样才能通过标头在 php 端低于字符串和检查身份验证?

基本 Zajkljask34jlksdlfkjds=

【问题讨论】:

  • 基本身份验证详细信息在 http 请求的“授权”标头内发送。因此您需要读取标头并解码 base64 字符串并获取用户名和密码并根据需要进行授权

标签: php rest asp.net-web-api


【解决方案1】:

How to read User Name and Password in PHP with Basic Auth。 以下代码只是您如何阅读基本身份验证的示例。详细信息并进行授权。

if (isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER']==$valid_username &&  $_SERVER['PHP_AUTH_PW']==$valid_password) {
  // the user is authenticated and handle the rest api call here
  echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";

} else {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;

}
?>

一旦授权,您可以生成会话密钥并将其发送给客户端,客户端可以使用该密钥调用其余 api 方法。在没有 SSL 的情况下使用基本身份验证是不安全的。如果您可以使用 HTTPS,那就更好了。 请参考以下链接来配置基本身份验证。

如果你使用的是 asp.net web api

http://www.asp.net/web-api/overview/security/basic-authentication

如果您使用的是 php,我建议您使用 rest api 框架

http://www.appelsiini.net/projects/slim-basic-auth

【讨论】:

  • 我想通过 Basic Zajkljask34jlksdlfkjds= 仅标头?
  • 使用 php,您可以使用 $_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_USER'] 服务器变量获取解码后的用户名和密码。
  • 我没有得到使用 $_SERVER['HTTP_AUTHORIZATION'] 任何提示的价值?
【解决方案2】:

首先,如果 .htaccess 文件不存在,您需要创建它。现在,您需要添加以下几行:

RewriteEngine On
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

接下来,在要解析信息的 PHP 文件中添加以下代码行:

if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {

    if (strpos(strtolower($_SERVER['REDIRECT_HTTP_AUTHORIZATION']),'basic')===0)
        list($username,$password) = explode(':',base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));

}

在这里你可以看到用户名和密码存储在 $username 和 $password 变量中。现在,你可以对这些值做任何你想做的事情,比如检查数据库——你可以通过添加额外的逻辑来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2015-01-31
    • 2016-09-29
    • 2014-10-13
    • 2015-04-01
    • 1970-01-01
    • 2017-02-04
    • 2023-04-01
    相关资源
    最近更新 更多