如何在同一端点上使用护照 js 本地和基本策略?

Posted

技术标签:

【中文标题】如何在同一端点上使用护照 js 本地和基本策略?【英文标题】:How to use passport js local and basic strategy on the same endpoint? 【发布时间】:2015-02-01 06:36:19 【问题描述】:

我正在使用基于 Yeoman 生成器的 MEAN Stack,并且我正在尝试使用密码保护我的 api 端点。

我希望能够在同一个端点上使用本地策略和基本策略,这样我就可以从外部源调用 API 并在我的 web 应用程序中使用它。

但是,当我实现这一点时,我一次只能使用一种策略,因为基本身份验证是“无状态”的,这意味着不附加会话。

到目前为止,我使用此代码获得了 2 个不同的端点和 2 个不同的策略:

router.get('/all-basic', passport.authenticate(['local','basic'], session: false ), controller.index);

router.get('/all-local', auth.isAuthenticated(), controller.index);

我想知道是否有任何其他方法或最佳实践可以尝试在同一端点上使用 2 个策略,或者我只需要调用 2 个不同的端点。

谢谢! 安德烈斯·奥索里奥

【问题讨论】:

如果删除 session: false 会发生什么? 仍然不起作用,我删除了会话标志,如果我从 curl 或 postman 尝试它可以工作,但是如果我从我的浏览器尝试(我登录到系统并从浏览器,我收到此消息“UnauthorizedError: No Authorization header was found”。这就像系统试图强制我使用基本身份验证,即使我使用本地策略登录。 【参考方案1】:

经过多次尝试,我想出了一个解决方案。

我使用了第二个端点:

router.get('/all-local', auth.isAuthenticated(), controller.index);

我使用邮递员提出了两个请求:

一个用于登录尝试,(如果您使用的是基于 Yeoman 的 MEAN Stack),要调用的端点是:

/auth/local

请注意,您应该使用 x-www-form-urlencoded 和两个键值属性(电子邮件和密码)进行 POST 调用。端点将返回一个令牌,您需要存储该令牌以便进行后续调用。

下一步是调用端点本身,我向 /all-local 发出了 GET 请求,并添加了一个名为 Authorization 的标头,其值为 Bearer [token],将 [token] 替换为第一次调用的令牌值。

希望对你有帮助。

【讨论】:

嗨,我也面临同样的问题,我需要你的帮助来解决这个问题,因为我没有得到你的最后一点,请指导我 您应该在快速路由文件中使用代码 sn-p,并验证您是否需要 POSTMAN,它是一个 REST 客户端,并从那里进行 2 次调用。第一个获得令牌一样```“令牌”:“eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NDcwZGY3MjIxOGY5MGUwMDhmYWY5MmUiLCJpYXQiOjE0MjY5NTA0ODU4NjUsImV4cCI6MTQyNjk2ODQ4NTg2NX0.GyYXeNJlIBjPmiFXdc_Aaxnm8Zxv1nm1VbX3FX6TVGI”``````这个令牌使从邮递员第二个电话与头部授权和价值承载一个GET eyJ0eXAiOiJKV1QiLC....

以上是关于如何在同一端点上使用护照 js 本地和基本策略?的主要内容,如果未能解决你的问题,请参考以下文章

需要了解passport.js本地策略

在服务器端护照js本地用户身份验证后,如何在客户端使用cookie显示用户信息?

在node.js的护照库中应该使用什么策略

使用带护照本地的护照Facebook策略时无法将用户序列化到会话中

如何将护照与角度节点应用程序一起使用?

Sails.js 与护照-http-bearer 身份验证不起作用