问题标签 [oauth2orize]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
268 浏览

node.js - oauth2 服务器创建 Nodejs

我正在尝试在 nodeJS 中实现一个 OAUTH2 服务器,它允许客户端应用程序使用我的网站登录用户(例如使用谷歌登录)。我尝试使用 oauth2orise(https://www.npmjs.com/package/oauth2orize)并引用了一些链接:-

https://hnryjms.io/2014/07/oauth2/ http://scottksmith.com/blog/2014/07/02/beer-locker-building-a-restful-api-with-node-oauth2-server/ 但我仍然无法理解如何调用方法以及我应该如何实现流程。因此,如果有人可以解释如何实现这将是有帮助的。

提前致谢。

0 投票
2 回答
996 浏览

node.js - 我可以在 Node JS 中使用 oauth2 构建我的项目吗

我想在我的项目中使用带有 nodejs 的 oauth2 授权和资源服务器。但我不能那样做。我多次尝试使用oauth2orize、express-oauth-server、oauth2-server库构建 oauth2 服务器,但不起作用。请帮助我用 oauth2 构建我的项目

0 投票
0 回答
563 浏览

node.js - 如何使用 loopback.io 设置 OAuth 2.0 服务器

我已根据文档和此链接https://strongloop.com/strongblog/node-js-loopback-api-gateway-sample-applications/设置了 OAuth 。

基于 loopback-component-oauth2 的选项理解代码库和流程的使用存在一些问题。是否有涵盖每个部分的教程或隐式、授权代码、刷新令牌、JWT 的工作实现。

我已经能够根据文档保护 API(例如:/api/Notes),它似乎确实阻止了请求,但不允许我进行身份验证。此外,当我向 /oauth/token 发出请求时,此 API 也会引发未经授权的 401 错误 - 来自 REST 客户端(如邮递员)和https://loopbacklocalhost/explorer

我正在使用环回 3.0。我很难处理没有完整记录的组件,也没有与文档对齐的示例代码。可能是我在这里遗漏了一些东西。

我也看过这个中心回购,似乎他们直接使用护照并且记录得很少,因此很难轻松整合。 https://github.com/strongloop/microgateway

注意:我已经完成了以下问题,存档 repo 测试。 如何使用环回设置 OAuth 2.0 服务器

欢迎任何帮助。

0 投票
0 回答
676 浏览

node.js - NodeJS+Express:Passport 与 OAuth2 的范围(访问权限)

想象一下,我正在api .example.com 上实现一个 API 服务,该服务需要使用 OAuth2 以足够的粒度来保护其端点,以适应不同的用户类型。

  • 针对 Facebook 进行身份验证的用户只能访问 https:// api .example.com/facebook
  • 对Twitter进行身份验证的用户只能访问 https://api.example.com/twitter
  • 针对授权服务进行本地身份验证的用户可以访问 facebook 和 twitter 端点

这意味着我们有以下角色:

  • 身份验证提供程序(授权服务器、Facebook、Twitter)
  • 授权提供程序(我的 OAuth2 服务器)(auth .example.com)
  • 资源提供者(我的 API 服务器)(api .example.com)
  • ExpressJS webapp 或 SPA ( www .example.com) 或本机应用程序

问题:

Q1应用流程应该如何实现?

我的想法是...

webapp 必须在 session 中将 accessToken 存储到api .example.com,并将 sessionid 发送到 Web 浏览器。如果没有accessToken,则必须将浏览器重定向到auth.example.com/login/selectprovider/ 提供client_id=" www.example.com "和client_secret ,redirect_url="https://www.example.com /”。

在 https:// auth .example.com/login/selectprovider/ 上,用户选择 facebook 或 twitter 或本地,并且auth .example.com 使用 client_id 和 client_secret 将用户(再次)重定向到 /login 或 facebook 或 twitter 和redirect_url=https:// auth .example.com/ twitter或 https:// auth .example.com/ twitter以轻松区分三者。

Facebook/twitter/local 方法将对用户进行身份验证并将浏览器重定向回auth .example.com。

然后auth .example.com 将为api .example.com 生成一个(承载)accessToken 并将其与 user.id 一起存储到本地数据库表中,并具有关联的范围(“facebook”、“twitter”或“local”) ,将密钥(userId)放入浏览器会话并重定向到https://www.example.com/

现在,当用户单击 WebApp 中的链接时,www .example.com 会在api .example.com上执行 GET 或 POST ,提供 client_id="www.example.com" client_secret 和 access_token。

api .example.com 端点验证 accessToken,如果没问题,则执行 API 并将值返回给www .example.com,然后将其呈现给用户的浏览器。

Q2以上是正确的流程,还是有更好的方法?如果正确,api .example.com 如何在其端点验证 accessToken?

auth .example.com是否应该为此公开一个只能使用 client_id=" api .example.com" 和 client_secret 访问的特殊端点(例如 /userinfo)?每次调用似乎都很昂贵,但是api .example.com还能如何信任令牌的有效性(因为它已过期或用户已注销)?

什么是符合 OAuth2 标准的方式?

Q3在护照/OAuth2orize 示例中,我看到了验证身份验证的 3 种方式:

  • if (req.user) {...};
  • if (req.isAuthenticated()) {...};
  • passport.authenticate('bearer', {session: false);

Q4 passport.authenticate('facebook') 到底是做什么的?

该信息在策略中提供。

所以这包含了client_id 和client_secret。这个什么时候用?每次调用passport.authenticate('facebook')?是否将整个重定向到 facebook 登录页面,获得授权代码授予并将其交换为 accessToken,以某种方式在内部存储 accessToken 并保留它直到注销?

这似乎不太可能,但我看不出它如何在没有这一切的情况下实际验证用户。而且每次 API 调用都太昂贵了,所以我相信它会更有效地工作。但我不知道如何和研究源代码并没有让它更清楚。

Q5 *api**.example.com 如何知道每个 API 请求中www .example.com 所包含的 Bearer accessToken 没有伪造或过期?

我认为它必须根据auth .example.com 服务对其进行检查,而该服务又必须检查 facebook/twitter 会话是否仍然有效,并在那一刻使用 refreshToken 刷新令牌?

0 投票
1 回答
1203 浏览

node.js - 我应该在哪里存储 code_verifier(使用 PKCE 的 oauth 2.0 代码授权流程)

我目前正在 SSR 页面中使用 PKCE 进行 oauth 2.0 代码授权授权(在前面使用 React,在后面使用 Express)。

code_verifier当客户端请求授权服务器代码时我应该存储在哪里(当授权服务器创建 code_challenge 和 code_verifier 以验证后者时)。我的授权服务器在独立的堆栈/基础架构中运行。

我应该存储code_verifier在 req.headers 中吗?(参见坎贝尔 OAuth TBPKCE-00 草案

我们遵循RFC6749

0 投票
0 回答
28 浏览

node.js - 客户端是 oauth2orize.exchange.code 中的用户

我一直在关注建议的服务器示例。我的大部分代码都可以正常工作,但由于某种原因,我遇到了一个问题,即 ClientID 是 UserID,导致身份验证代码无法验证。我很难找到客户端变量在库中的设置位置,因为它有点超出我的理解。以下是验证 ClientID 是否等效的代码段:

这是来自oauth2.js 中的第 ~89 行。在此段中,UserID 存储在 ClientID 中。数据库是正确的,所以我的假设是其中一个数据库函数被不正确地覆盖,导致它查询用户而不是客户端。

如果有人对设置客户端变量的位置有任何建议,这将使我免于将头撞在桌子上!谢谢!