Rest API如何通过Basic Auth进行身份验证?

时间:2016-03-19 09:51:06

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

我想使用基本授权创建RESTful API。

我怎么能在PHP中做到这一点?我如何通过标题获得下面的字符串和检查PHP端的身份验证?

  

基本Zajkljask34jlksdlfkjds =

2 个答案:

答案 0 :(得分:2)

How to read User Name and Password in PHP with Basic Auth。 以下代码只是示例,您可以如何阅读基本身份验证。细节并进行autherization。     

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

答案 1 :(得分:0)

首先,如果文件尚未存在,则需要创建.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变量中。现在,您可以对这些值执行任何操作,例如检查数据库 - 您可以通过添加额外的逻辑来执行此操作。