REST API登录方法

ahm*_*111 8 authentication rest codeigniter

我们正在构建需要所有页面的登录信息的系统.该应用程序被设计为使用codeigniter作为Phil Sturgeon库的Restful应用程序.此库仅使用API​​密钥通过HTTPS连接的每个请求发送api调用来授权api调用.

即使它使用2路认证或仅使用API​​密钥.我正在寻找一段时间是以下场景:

  • 用户首次请求该应用程序(例如:https://www.xyz.com),然后将其重定向到登录页面以检查凭据
  • 用户输入usernam /密码并通过https发送
  • 服务器检查信息是否有效,然后:

    • API KEY应由服务器提供给客户端,作为此用户名标识的资源(这是问题??? !!!)

    • 如何以安全的方式将API密钥发送到客户端?

      • 1)我可以使用会话cookie并在cookie中恢复API KEY,然后在每个即将到来的请求中使用此API KEY(这是暴力的其余的无状态,我不确定它是否足够安全).
      • 2)实际上我不知道其他选择:)如果你能提供帮助,轮到你了

如果你能给出一个例子,那将是一个很大的帮助,因为我找到并阅读了很多文章

:)

sto*_*ain 8

由于连接是HTTPS,因此通过线路发送的任何内容都是安全的(从理论上讲,如果你没有做到这一点).不确定整个API是否通过HTTPS提供(您没有指定),因此即使您可以将密钥作为登录的一部分返回(仍然在HTTPS的保护下),如果其余的api不是HTTPS,可以在下一个请求中嗅探密钥.

会话和cookie通常不是RESTful应用程序的一部分; REST是无状态的.

类似于循环键的东西对于非HTTPS更好(也适用于HTTPS).您通过HTTPS登录,服务器返回api密钥,您在下一个请求中使用它,服务器返回新的api密钥,您在下一个请求时使用它,依此类推.虽然它比单个api密钥优于非HTTPS,但它并不完美.如果有人从后续请求之一中嗅到响应,并且您最终没有使用该密钥,则可以使用它.这会将攻击向量缩小到从服务器到客户端的非HTTPS响应,因为如果从客户端到服务器的请求被嗅探,则api密钥将已被您的合法请求使用.但是,如果您没有通过HTTPS提供api,则应该采取更多措施来保护API.

如果是我,我会查看请求签名+ https.这里有一些关于请求签名的讨论:https://stackoverflow.com/a/8567909/183254

http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/Securing the API部分还有关于摘要身份验证的一些信息.

客户端上的伪代码示例js函数

function get_calendar(){
    var key = $('#api_key').value();
    $.ajax({
        type: 'get',
        url: '/index.php/api/calendar?key=' + key,
        success: function(response){
            // show calendar
            // ...
            // set received api key in hidden field with id api_key
            $('#api_key').value(response.api_key)
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

示例控制器方法:

function calendar_get($api_key = ''){
    if($api_key_matches){//verify incoming api key
        $r = array();
        $r['calendar'] = $this->some_model->get_calendar();
        $r['api_key'] = $this->_generate_api_key();// generate or get api key
     }
     $this->response($r);
}
Run Code Online (Sandbox Code Playgroud)