小编cod*_*_uk的帖子

RESTful API:如何安全地存储承载API令牌?

我正在构建一个RESTful API。我唯一的问题是如何进行身份验证,因为我想要一种无状态方法,其中服务器拥有的唯一信息就是请求本身。

所以我想我会看看大男孩是怎么做到的。

我看到大多数服务向用户/应用程序发出令牌。然后将其用于每个后续请求。例如,Twitter和GitHub使用OAuth2,我看到它们发出了承载令牌。到目前为止,一切都很好-无状态,干净且简单:

$ curl -H“授权:令牌OAUTH-TOKEN” https://api.github.com/xyz

但是我有一个问题:我是否将该OAUTH-TOKEN令牌存储在我的数据库中以验证用户……如果是,怎么办?


(编辑以澄清问题)

假设这是我的数据库表:

用户| 令牌
abc | 123
xyz | 789

第一个用户希望使用其令牌发出API请求。因此他们知道自己的令牌是“ 123”,因此他们这样做:

curl -H“授权:承载123” https://myapi.com

这就是我的API所必须提供的所有信息,因此它查找WHERE token =“ 123”,并发现它是用户“ abc”。简单。都好。回复已返回。

理想情况下,我希望我的表是这样的(简单,没有开销),所以我的问题确实是:这样将令牌存储在数据库中是个坏主意吗?

(我想这是因为我习惯于仅由于处理正常的电子邮件/密码行而认为这很不好)

因此,然后我就想,好吧,让我们说我必要散在我的表这些令牌:我怎么会再看看行?那是关于哈希值查找的最后一个问题所在:我假设会有冲突的可能性,因为如果两个令牌具有相同的哈希值,那么如果您基于哈希值进行查找,就不会确定知道哪个用户发出了请求吗?

这使我想到了如何添加如何标识行的附加值。就像您既需要电子邮件又需要密码来标识行(而不仅仅是密码)一样,我想知道对于API请求而言,等效的内容是什么。但是,是的,最简单的解决方案是最好的,我认为将其与令牌一起传递确实可以很好地解决问题。

因此,您确实回答了“如果我确实需要存储散列的令牌,如何识别行”的问题。

唯一剩下的问题是“我什至需要将它们存储为散列-并产生这种开销吗?”

api rest oauth github token

5
推荐指数
1
解决办法
2575
查看次数

仅当请求中存在特定标头时才允许访问私有 S3 存储桶

我在 S3 中有一个私有存储桶,并且希望只允许访问包含从 CDN(不是 CloudFront,因为这当然很容易允许使用自己的 id)发送的特定(秘密)标头的请求。

因此,这意味着编写存储桶策略以仅允许那些秘密标头请求。

我一直在做一些研究(http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html),我可以看到您可以测试请求的其他属性,例如aws: Referer对引用进行比较,aws :SourceIp对源 IP 进行比较 - 但我将如何对自定义标头(例如“ X-my-secret-header ”)进行比较?

存储桶策略是否支持测试标头值?如果是这样,怎么办?

policy private amazon-s3

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

为 JWT NodeJS Lambda 生成足够的秘密

我一直在考虑第一次使用 jsonwebtoken ( https://github.com/auth0/node-jsonwebtoken )实现 JWT 。为此,我需要一个秘密值。

是否有推荐的命令或站点来生成足够好的命令或站点?

我找到了这个页面(https://security.stackexchange.com/questions/95972/what-are-requirements-for-hmac-secret-key),其中详细说明了秘密应该有多长(答案似乎是256 位),但你从哪里得到一个?:)

否则,似乎另一种选择是使用公钥/私钥对。他们似乎更喜欢我发现的本指南中的这种方法:https : //medium.com/@siddharthac6/json-web-token-jwt-the-right-way-of-implementing-with-node-js-65b8915d550e从那以后家伙说他开始使用字符串,然后转而使用密钥对。然而,复杂的是这将在 Lambda 上运行,所以我希望秘密(字符串或密钥)在环境变量中。作为文件保存。但是,如果您将证书放在环境变量中,我想知道 AWS 是否会去掉换行符,从而在 Node 尝试使用它时搞砸。所以我认为一个秘密字符串会更简单 - 只要它足够强大。

谢谢!

lambda node.js jwt

3
推荐指数
1
解决办法
2481
查看次数

S3 存储桶的生命周期策略

我有一个 S3 存储桶,在该存储桶上配置了生命周期策略,该策略表示在 1 天后将存储桶中的所有对象存档(因为我想暂时将文件保存在那里,但如果没有问题,那就没问题了存档它们而不必支付 S3 存储费用)

但是我注意到该存储桶中有一些文件是在 2 月份创建的。

所以..我认为如果您选择“存档”作为生命周期选项,这是否意味着“复制到冰川然后从 S3 删除”?在这种情况下,2 月份留下的文件的问题将是一个错误 - 因为它们没有?

只有我看到还有另一个选项——“存档然后删除”——但我认为这意味着“复制到冰川然后从冰川中删除” ——这是我不想要的。

有没有其他人遇到过 S3 -> Glacier 的问题?

amazon-s3 amazon-web-services

2
推荐指数
1
解决办法
555
查看次数

如何使用 JS Quasar 框架从构建中删除 console.log?

我正在尝试 Quasar 框架(对于那些不熟悉的人,它基于 Vue)并且进展顺利。但是我试过运行构建(npm run build)并重复:

错误意外的控制台语句 no-console

...所以构建失败,因为它看到console.log(...)并且不高兴。我的选择:

  1. 不要在开发中使用console.log。但它很方便。
  2. 注释掉可能强制执行的 eslint 规则,因此让console.log进入生产环境。但这对于性能/安全性来说并不理想。
  3. 让构建自动删除任何console.log。这就是我所追求的。

但是如何?

我查看了构建https://quasar.dev/quasar-cli/cli-documentation/build-commands,它提到在内部使用 webpack 和 UglifyJS。鉴于此,我在通用 Vue/webpack 项目中找到了删除 console.log 的答案:https : //github.com/vuejs-templates/webpack-simple/issues/21

...但如果是这样,由于没有 webpack 配置文件,Quasar 中的内容在哪里?我想象在 quasar.conf.js 文件中(因为我在那里看到了一个 'extendWebpack' 行 - 听起来很有希望)。或者有没有更好的方法来做到这一点?使用 Quasar 时,其他人如何在生产中删除console.log?或者在没有它的情况下处理日志?

谢谢!

webpack vue.js quasar-framework

2
推荐指数
1
解决办法
1888
查看次数