我正在构建一个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请求而言,等效的内容是什么。但是,是的,最简单的解决方案是最好的,我认为将其与令牌一起传递确实可以很好地解决问题。
因此,您确实回答了“如果我确实需要存储散列的令牌,如何识别行”的问题。
唯一剩下的问题是“我什至需要将它们存储为散列-并产生这种开销吗?”
我在 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 ”)进行比较?
存储桶策略是否支持测试标头值?如果是这样,怎么办?
我一直在考虑第一次使用 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 尝试使用它时搞砸。所以我认为一个秘密字符串会更简单 - 只要它足够强大。
谢谢!
我有一个 S3 存储桶,在该存储桶上配置了生命周期策略,该策略表示在 1 天后将存储桶中的所有对象存档(因为我想暂时将文件保存在那里,但如果没有问题,那就没问题了存档它们而不必支付 S3 存储费用)
但是我注意到该存储桶中有一些文件是在 2 月份创建的。
所以..我认为如果您选择“存档”作为生命周期选项,这是否意味着“复制到冰川然后从 S3 删除”?在这种情况下,2 月份留下的文件的问题将是一个错误 - 因为它们没有?
只有我看到还有另一个选项——“存档然后删除”——但我认为这意味着“复制到冰川然后从冰川中删除” ——这是我不想要的。
有没有其他人遇到过 S3 -> Glacier 的问题?
我正在尝试 Quasar 框架(对于那些不熟悉的人,它基于 Vue)并且进展顺利。但是我试过运行构建(npm run build)并重复:
错误意外的控制台语句 no-console
...所以构建失败,因为它看到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?或者在没有它的情况下处理日志?
谢谢!