- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在构建一个 API 并尝试在多个上下文中找出身份验证。
API 需要为我们创建和部署的客户端应用程序提供服务,并使用密码处理经过身份验证的请求。在每个请求中发送密码并不是一个好主意,因此首先点击登录端点并获取 session ID 更有意义。有问题的 webapp 是用 AngularJS 编写的,应该在 localStorage 中跟踪它自己的 session ,以减轻 session 劫持并消除对 cookie 的依赖来跟踪 session 。
webapp 需要在每个请求中发送 session 标识符,目前在请求正文中这样做。这很容易分片并与 API 紧密耦合。我宁愿以一种方式传递所有身份验证信息——最好是通过 header ——而不是通过分布在请求正文、url 和 header 中的许多不同字段。
Redis很棒,当然。 session 存储很简单,并且会自动进行垃圾收集。不幸的是,redis 中的 session 很难管理:我无法轻易撤销给定用户的所有 session 。通过将 session 存储在真正的 redis 数据结构而不是全局键空间中来添加该功能会消除添加键控 TTL 的能力。我当前的解决方案是在 MongoDB 用户集合中存储 session 列表,并垃圾收集 session 事件中过期的 session (例如登录/注销)。
session 以 connect-redis 存储在 redis 中。模块,但由于它们是随每个请求一起发送的,因此它们不包含在 cookie 中。目前,我有一小块中间件,它将 session 标识符从请求正文中取出,并将其放入 req.cookies
对象中。
var express = require('express');
var RedisStore = require('connect-redis')(require('connect'));
var app = express();
app.use(function(req, res, next) {
req.cookies = {session: req.body.session};
});
app.use(express.session({
store: new RedisStore({
client: redisClient,
prefix: 'session:'
}),
key: 'session',
secret: 'all mine'
});
这种方法效果很好,只是 express.session
在 express 响应时最终设置了 cookie,而这不是所需的行为。
如何在 Express 的上下文中正确设置?
我们的 API 还应支持第三方应用程序的 API key ,以获得对我们系统的有限和受控访问。我所知道的最常见的机制是将 API key 分发给感兴趣的开发人员,并让开发人员将 API key 作为请求的一部分传递。这遇到了 session /密码身份验证遇到的相同困境:每个 API 都希望 API key 位于请求的不同部分,从正文到 url 到 header 。
虽然我们不打算在初始版本中支持 OpenAuth 和 OpenID 等开放式身份验证标准,但我们确实希望创建一个框架,在其中添加上述标准很简单。其中一部分可能是统一将授权凭据传递给 API 的方式,就像 session /密码和 API key 支持的身份验证一样。
Another question询问自定义 HTTP Authorization
header 是否是个好主意,或者自定义 header 是否更好。
为了支持 RESTful API 的 CRUD 范例,不在正文中提供身份验证信息是有意义的,因为这会将所有 API 请求限制为 POST 请求,而 CRUD 建议使用各种 HTTP 方法。
两件事:
最佳答案
正如给出的,这个问题是无法回答的。 session 是状态。因此,您不能无状态地实现 session 。
如果你真的想要无状态身份验证,那么你不能有 session ,你应该使用 HTTP Authentication机制。
如果您确实需要 session ,但不想在 Cookie header 中传输状态 token ,那么您应该使用 OAuth机制,它允许使用 Authorization header 或请求参数来保存协商的状态 token 。
we do wish to create a framework in which the addition of said standards is straightforward
最简单和最好的方法就是从它们开始。不要重新发明轮子。 OAuth2 旨在在多个用例中轻松实现,并且如果您需要更多,它有自己的扩展机制。
关于Node.js 无状态/无 Cookie session API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19388434/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!