问题标签 [passport-azure-ad]

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 投票
3 回答
735 浏览

azure - 使用个人 Microsoft 帐户进行单点登录在 Azure 中的已注册应用程序中不起作用

我们使用公司帐户在 Azure 中注册了一个应用程序。我们已将其设置为 web-app 类型,并将 signInAudience 设置为AzureADandPersonalMicrosoftAccount

当我们使用公司帐户登录我们的网络应用程序时,它可以工作,但是当我们使用带有 hotmail 地址的个人 Microsoft 帐户时,我们会收到以下消息:

我们仔细检查了所有设置,它们看起来有效。我们的想法已经用完了这是我们清单的一个版本:

0 投票
0 回答
1048 浏览

node.js - 是否可以使用 node.js passport.authenticate() 在 AWS api 网关中验证承载令牌?

我们有一个具有 MSAL 登录的前端反应应用程序,该应用程序使用 aws api 网关 api 端点进行后端操作。在登录过程之后,我想将承载令牌发送到 api 并对其进行身份验证。根据我在线阅读的内容,您可以使用 node.js 和 passport.authenticate() 来执行此操作。问题是试图在 aws api 网关中进行这项工作。所以我想出了一个通过 Authorizer lambda 进行身份验证的方案。1) 使用 aws-serverless-express 在 lambda 中将 express 作为 api 代理运行 2) 使用 passport-azure-ad 模块设置承载策略。3) 运行 passport.authenticate() 来验证令牌。4) 在 lambda 的有效令牌返回允许策略 5) api 请求将继续

我刚刚将以下文件和所需的节点模块放入 node.js lambda。所以这本质上是客户端和 api 之间的中间件。如果令牌有效,将允许请求通过。

在我的测试中,当它应用承载策略时出现此错误:

{ "name": "AzureAD: Bearer Strategy", "hostname": "169.254.43.173", "pid": 8, "level": 30, "msg": "authentication failed due to: token is not found", “时间”:“2020-08-24T23:48:35.497Z”,“v”:0 }

如果有一种更简单的方法来验证承载令牌,那就太好了。

Lambda index.js 文件:

配置.js

app.js 文件

0 投票
1 回答
315 浏览

node.js - 护照天蓝色广告:具有相同令牌的前端和后端(什么策略,以及如何?)

我正在尝试使用前端(http://localhost:8080)和 API 后端(http://localhost:5000)做一个 node.js 应用程序。在这两种情况下,我都希望通过 Azure AD 进行身份验证。

这是我的第一个这样的应用程序,所以我不知道如何处理它。

我想做的是:

  1. 在前端使用微软账号登录;
  2. 当用户登录,获取路由时(即http://localhost:8080/list),调用后端API(http://localhost:5000/api/list)获取信息'list'并渲染(取决于用户访问权限)。

我正在考虑使用“passport-azure-ad”,但我不知道该采取什么策略?OIDCStrategy 还是 BearerStrategy ?

我可以使用 OIDCStrategy 轻松进行前端登录,但我没有“承载”,所以我不明白如何使用相同的“登录”来调用后端 API?使用 BearerStrategy,我试图通过获取 'https://login.microsoftonline.com/'+MyTenantId+'/oauth2/v2.0/authorize?response_type=code&client_id='+MyClientId+'&redirect_uri=http%3A 来获得 Bearer %2F%2Flocalhost%3A3000%2Fcallback&scope=openid' 但每次我在 jwt.io 上对其进行测试时,它都会作为无效的承载('无效签名')返回,并且我无法在后端服务器中使用该承载。

我有点迷茫怎么办?我需要帮助。

谢谢

0 投票
0 回答
222 浏览

node.js - Passport-azure-ad:身份验证失败,原因是:无法建立隧道套接字,原因 = getaddrinfo ENOTFOUND 3128

我尝试在我的节点应用程序上实现 Passport-azure-ad OIDCStrategy。它可以在我的个人计算机中找到,但使用我的公司笔记本电脑(未配置 VPN 或代理)我无法连接,并且出现该错误:

我不明白为什么,因为我可以通过浏览器访问https://login.microsoftonline.com/而没有任何问题。

我不明白端点节点尝试联系什么以及为什么无法建立隧道套接字。

有什么帮助吗?

谢谢

0 投票
1 回答
989 浏览

node.js - Azure AD 使用 Passport.js 对访问令牌进行无效签名

我正在尝试使用 passport-azure-ad 策略使用 Azure AD B2B 为我的 NodeJS/VueJS 应用程序设置身份验证。我使用授权代码流来获取 access_token 和 id_token。当我将 access_token 传递给 passport-azure-ad 策略时,问题就来了。我收到一条错误消息,指出令牌的签名无效(jwt.io 显示相同)。如果我使用 id_token ,那么一切正常。但是我不想使用 id_token,因为我想实现静默刷新,而我只能使用 access_token 来做到这一点。

这是我的设置:

  • 我有一个 VueJS 应用程序(以 Node.js 作为后端),我想使用 AAD B2B 作为登录名
  • 在前端我先做这个重定向:
  • 然后我将代码发送到我的后端,用这个请求将它换成一个令牌:
  • 然后我将令牌保存在会话存储中的前端,并与每个请求一起作为授权标头发送。

这是我的 BearerStrategy 的配置:

我认为问题是由于某种原因我得到了一个 v1 令牌而不是 v2。我尝试"accessTokenAcceptedVersion": 2在应用注册的清单中进行设置,但没有成功。

我究竟做错了什么?

这是解码后的令牌,其中隐藏了一些信息:

更新: 原来我得到了一个不能用于我自己的 API 的 MS Graph API 的令牌。所以我必须为我的应用程序公开一个 API 并将其添加到 AAD 中的权限中。对于这种情况,这是一个非常好的教程-> https://authguidance.com/2017/12/01/azure-ad-spa-code-sample/

0 投票
1 回答
352 浏览

javascript - GraphQL Server 上下文中的 Passport Azure AD 身份验证

希望有人可以帮助菜鸟解决一些异步 javascript 问题。

我正在尝试使用 Passport 和 passport-azure-ad 策略来保护 GraphQL 服务器实例。我可以从日志中看到传入的访问令牌已正确验证,并且所有护照代码都按预期工作。

authErr 和 authUser 参数正确地传递给自定义回调,但是在执行回调之前返回上下文。

理想情况下,如果用户不可用,我想if (!user) throw new AuthenticationError('you must be logged in');在上下文块中,但是由于代码的异步性质,我无权访问它。

如何使上下文中的代码等到执行自定义 passport.authenticate 回调?或者,我是否有更好的方法来做到这一点?我是阿波罗服务器、护照甚至使用节点的新手,所以如果我做错了什么我不会感到惊讶。

现在看来,我的设置context.user甚至在传递给解析器的上下文中都不可用。

提前致谢。

0 投票
0 回答
496 浏览

javascript - 护照天蓝色广告失败?“Strategy.prototype.jwtVerify:我们没有收到我们知道如何验证的令牌”

我正在尝试验证 Angular SPA 用户以使用带有 passport-azure-ad 的节点 API。

使用 msal 的 SPA 似乎可以正常登录并发送不记名令牌。在 API 中,passport 在日志中提供此消息并且不验证令牌。

{"name":"AzureAD: Bearer Strategy","hostname":,"pid":18992,"level":30,"msg":"authentication failed due to: In Strategy.prototype.jwtVerify: 我们没有收到一个我们知道如何验证的令牌","time":"2020-11-16T09:05:39.130Z","v":0} 在护照日志中,我可以看到它已经解码了 JWT。

MS 的文档和教程没有提供解释。

这是问题还是配置?

在 jwt.ms 上,令牌看起来像这样(删除了敏感内容)

该令牌是为作为访客用户添加到 AD 的用户创建的。

配置(已删除租户 ID)

广告

两个已注册的应用程序,SPA 和 API,其身份验证设置为多租户和个人 Microsoft 帐户。向 SPA 授予一个 API 范围,“access_as_user”</p>

角SPA

角 7 @azure/msal-角 1.1.2

MSAL 配置

NodeJs API

护照 0.4.1 护照天蓝色广告 4.3.0

节点配置
0 投票
2 回答
593 浏览

node.js - 如何正确启用租户限制

如何限制特定域的用户登录?

在注册过程中,您可以single-tenant根据我在. 但是没有一个选项可以为租约限制指定一个域。if your target audience is internal to your organization.

但是我发现您可以通过使用代理服务器在 HTTP 标头中指定租户白名单来限制用户。Restrict-Access-To-Tenants

而且我无法理解该single-tenant选项会影响什么?passport-azure-ad租赁限制是否提供任何功能?

谢谢。

0 投票
1 回答
499 浏览

node.js - 从 Microsoft graph api 列出用户所需的权限

在我的应用程序中,我使用 Azure AD 的OIDCStrategy策略实现了登录模式passport-azure-ad。现在我正在尝试使用登录微软后收到的访问令牌进行 Graph 的列表用户 api 调用。但我收到了这个错误。

我的应用程序有这么多权限,但我仍然收到上述错误。我究竟做错了什么?

应用程序权限

这是解码的访问令牌对象:

Application administratorPS:当登录的用户被分配角色时,API 会成功。用户是否需要单独的/usersapi 角色?应用程序权限是否不够?

0 投票
1 回答
76 浏览

microsoft-graph-api - 为单点登录配置 passport-azure-ad(无需输入密码)

我正在尝试使用 Azure AD 为我的 SaaS 实施单点登录。我正在使用本指南(带有示例代码): https ://docs.microsoft.com/en-us/graph/tutorials/node

我是否需要配置我的 passport-azure-ad 以启用单点登录?我不仅想将应用程序连接到 Azure AD,还想消除插入密码 (SSO) 的需要。我正在使用 OIDCStrategy,我的应用程序只需要确认用户的电子邮件地址(“谁”),仅此而已,以在我的应用程序中提取该用户的记录(如果该用户存在)。

我已将环境变量从常见的 Azure 端点更改为特定的租户指南、appid 和 secret。我得到了公司特定的屏幕(带有最终用户的公司徽标),用户可以在其中单击他们的帐户。这对于 SSO 来说应该足够了,但是现在用户会被重定向到登录屏幕(也是公司品牌的),其中包含他们的电子邮件和一个输入密码的字段。

所以问题归结为,我需要在我的 Node 代码中进行特定配置还是这纯粹是 Azure 设置问题?