小编can*_*lin的帖子

REST API基于令牌的身份验证

我正在开发一个需要身份验证的REST API.因为身份验证本身是通过HTTP上的外部Web服务发生的,所以我推断我们会分配令牌以避免重复调用身份验证服务.这让我整整地回答了我的第一个问题:

这真的比仅要求客户端在每个请求上使用HTTP Basic Auth并缓存对身份验证服务端的调用更好吗?

Basic Auth解决方案的优点是在内容请求开始之前不需要完整的服务器往返.令牌可能在范围上更灵活(即仅授予对特定资源或操作的权限),但这似乎比我更简单的用例更适合OAuth上下文.

目前令牌是这样获得的:

curl -X POST localhost/token --data "api_key=81169d80...
                                     &verifier=2f5ae51a...
                                     &timestamp=1234567
                                     &user=foo
                                     &pass=bar"
Run Code Online (Sandbox Code Playgroud)

api_key,timestamp并且verifier被所有请求所需."验证者"由以下人员返回:

sha1(timestamp + api_key + shared_secret)
Run Code Online (Sandbox Code Playgroud)

我的意图是只允许来自已知方的呼叫,并防止呼叫被逐字重用.

这够好吗?漏杀?矫枉过正?

有了令牌,客户可以获得资源:

curl localhost/posts?api_key=81169d80...
                    &verifier=81169d80...
                    &token=9fUyas64...
                    &timestamp=1234567
Run Code Online (Sandbox Code Playgroud)

对于最简单的呼叫,这似乎有点可怕.考虑到最终shared_secret将嵌入(至少)一个iOS应用程序的意愿,我认为它可以被提取出来,这甚至提供了一种超出虚假安全感的东西吗?

authentication rest

121
推荐指数
2
解决办法
16万
查看次数

了解DNS查找机制

导致我尝试取消此过程的特定查询是:

assets.example.com如果父域example.com已经解析,子域的DNS查找会更快吗?

通过我(天真)的理解,将域名转换为IP地址的基本过程非常简单.十三个根服务器的地址,他们知道如何解析像com和的顶级域名net,是在网络硬件中进行硬编码的.在查找的情况下example.com,我们的本地DNS服务器(可能是我们的路由器)要求其中一个根服务器在哪里找到顶级域名服务器com.然后它会询问结果名称服务器是否知道如何解决example.如果确实如此,我们就完成了,如果没有,我们就会被传递到另一台服务器.在这个过程中的每个域名服务器可能是缓存,这样在一段时间我们的本地路由器现在知道随便到哪里寻找comexample,而com服务器将知道去哪里找example.

不过,我真的不明白.

  • 我知道还有其他中间DNS服务器,例如ISP提供的服务器.他们在什么时候被查询?
  • 如果comTLD名称服务器不知道如何解决example,它如何解决其他名称服务器要检查?或者这只是意味着example.com无法解决?
  • 当我注册域名并配置域名服务器时,我是否实际上为该TLD的域名服务器使用的数据库中的特定TLD子域编辑了一组NS记录?

维基百科解释说,一些DNS服务器将缓存与递归查询实现相结合,允许它们提供缓存命中并可靠地解决缓存未命中问题.我不明白这些服务器是如何被查询的,或者解析算法如何(甚至广泛地)起作用.

回顾我最初的问题,假设A记录在同一个名称服务器上,我可能会选择"否".这准确吗?

subdomain dns nameservers resolve

11
推荐指数
1
解决办法
7046
查看次数

从node.js报告上载进度

我正在编写一个小的node.js应用程序,它从HTML表单接收多部分POST并将传入的数据传递给Amazon S3.的强大的模块提供了多部分解析,露出各部分作为节点.该诺克斯模块处理PUT到S3.

var form = new formidable.IncomingForm()
 ,  s3   = knox.createClient(conf);

form.onPart = function(part) {
    var put = s3.putStream(part, filename, headers, handleResponse);
    put.on('progress', handleProgress);
};

form.parse(req);
Run Code Online (Sandbox Code Playgroud)

我通过socket.io向浏览器客户端报告上传进度,但是很难获得这些数字以反映节点上传到s3的真实进度.

当浏览器到节点上传瞬间发生时,就像节点进程在本地网络上运行时一样,进度指示器立即达到100%.如果文件很大,即300MB,则进度指示器缓慢上升,但仍然比我们的上游带宽允许的速度快.在达到100%进度后,客户端然后挂起,大概等待s3上传完成.

我知道在内部putStream使用Node的stream.pipe方法,但我不明白这是如何工作的细节.我的假设是节点尽可能快地吞噬输入数据,将其丢入内存.如果写入流可以足够快地获取数据,则很少有数据一次保存在存储器中,因为它可以被写入和丢弃.如果写入流速度很慢,就像在这里一样,我们可能必须将所有传入数据保留在内存中,直到可以写入为止.由于我们正在侦听data读取流上的事件以便取得进展,因此我们最终报告上传速度比实际速度快.

我对这个问题的理解是否接近标记?我该怎么办呢?我需要坐下来脏write,drainpause

amazon-s3 node.js formidable knox-amazon-s3-client

9
推荐指数
1
解决办法
3287
查看次数

在Rails中缓存Twitter API调用

我的项目实现了"使用Twitter登录"OAuth舞蹈,并呈现一个页面,显示当前用户所遵循的所有用户.

# /views/user/show.html.erb

<h1>Users You Follow</h1>

<%= render :partial => 'followed_user', :collection => @current_user.following %>
Run Code Online (Sandbox Code Playgroud)

following 是Users模型的虚拟属性.

# /users/models/user.rb

def following
  result = twitter_request_authenticated('get_following')
  parse_body(result)
end
Run Code Online (Sandbox Code Playgroud)

首先,因为我是Rails(和MVC)的新手,我不得不问:这是一个合适的抽象吗?这些'跟随用户'本身应该被建模吗?

而现在真正的问题是:

在每个页面加载上点击Twitter获取此信息似乎是不必要的.如果我们想在给定的时间段内缓存此类API调用的结果(并使方法可用于方便地刷新该缓存),那么我们该怎么做呢?这只是将API调用的返回值存储在数据库列中的问题,以及"到期"列,并且只在该列值为空或cache_expires <now时调用API?如果是这样,那听起来可能更好地位于自己的模型中.思考?

twitter ruby-on-rails

6
推荐指数
1
解决办法
2152
查看次数

存储全局站点首选项[PHP/MySQL]

有人可以推荐存储一般网站首选项的最佳做法吗?例如,如果脚本未设置一个默认页面标题,或者要在内容框中显示的特色项目数,或者系统在上载图片时应该制作的缩略图大小列表.集中这些值具有明显的好处,即允许人们轻松更改可能在许多页面上使用的首选项.

我的默认方法是将这些首选项作为属性/值对放在*gulp*EAV表中.

这个表不可能变得很大,所以我不太担心性能.我的架构的其余部分是关系型的.它确实会让一些该死的丑陋查询:

$sql = "SELECT name, value FROM preferences"
.    " WHERE name = 'picture_sizes'"
.    " OR name = 'num_picture_fields'"
.    " OR name = 'server_path_to_http'"
.    " OR name = 'picture_directory'";
$query = mysql_query($sql);
if(!$query) {
    echo "Oops! ".mysql_error();
}
while($results = mysql_fetch_assoc($query)) {
    $pref[$results['name']] = $results['value'];
}
Run Code Online (Sandbox Code Playgroud)

有谁能建议更好的方法?

php mysql database preferences entity-attribute-value

4
推荐指数
1
解决办法
2942
查看次数