问题标签 [azure-ad-graph-api]

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 投票
1 回答
942 浏览

ios - ADAL for iOS 异常与不同的用户登录

我正在使用 ADAL iOS 库进行 Azure 身份验证。但是,如果我先使用一个帐户登录,然后退出并使用另一个帐户登录,则会遇到问题。即使我设置了“AD_PROMPT_ALWAYS”,我也会收到以下错误。

我清除了缓存,并尝试清除了我认为的 cookie:

但我不认为有任何 cookie 需要清除。当我得到登录网页时,用户名是预先填写的。几周/几个月前我认为它运行良好,但现在似乎出现了问题。我今天从最新的 GitHub 源代码构建了这个库。

有什么建议可以让我切换用户名吗?

0 投票
1 回答
4915 浏览

azure - 代表应用程序而不是用户访问 Azure Graph API

继我之前的问题之后:在 ADAL JS 中使用 Azure AD 和 OAuth2 隐式授权进行分组声明,我已经设置了一些东西,以便用户可以使用 Azure/ADAL JS 进行身份验证,然后我使用他们的令牌访问 Azure Graph API代表该用户。这很好用,我可以获取他们的用户和组信息。

但是,我们现在有一个用例,另一个系统将在应用程序的上下文中登录我们的应用程序,而不是作为单个用户。我不知道我做得是否正确,但我有第二个 Azure AD 应用程序,它带有一个客户端密钥,通过从 AAD API 请求一个令牌来进行身份验证。我可以获得一个令牌并将其传递给我们的应用程序。但是,我不能再使用该令牌代表该用户(现在是一个应用程序)访问 Azure Graph API。

首先,这实际上是可能的还是我正在尝试不可能的事情?

如果可能的话,我必须做些什么不同的事情才能让它发挥作用?它只是 Azure 应用程序中的权限,还是我需要在代码中以不同的方式执行?

我用于代表用户访问 Graph API 的代码(删除了异常处理和空检查)是:

我得到的异常是AADSTS50034: To sign into this application the account must be added to the {directory ID of my main application} directory错误invalid_grant

我似乎无法弄清楚我做错了什么,因为我相信所有 Azure 应用程序都配置正确,它们至少用于用户身份验证。我还向我的第二个 Azure AD(客户端)应用程序应用了相同的应用程序并将权限委派给其他目录进行用户身份验证所需的权限。

任何帮助,将不胜感激。

更新:系统概述/配置

因此,我似乎没有提供足够的有关系统配置方式的上下文,所以让我在这里尝试解决这个问题。

我们有一个在 Azure 中运行的企业 SaaS 应用程序(我们称之为我们的应用程序)。它在 Azure AD 中有一个“应用程序”(我们将其称为AAD 应用程序以避免混淆)。这是一个多租户 AAD 应用程序,用户通过 AAD 使用 OAuth2 进行身份验证。

作为企业应用程序,我们的客户都有自己的 Azure AD(可能会或可能不会同步到本地 AD)(我们称其为 AAD)。在配置他们的系统以使用我们的应用程序时,我们有一个来自他们 AAD的全局管理员授予我们的 AAD 应用程序同意 Windows Azure Active Directory 的以下权限(使用管理员同意授予):

  • 应用权限:
    • 读取目录数据
  • 委托权限:
    • 以登录用户身份访问目录
    • 读取目录数据
    • 登录并阅读用户资料

当用户浏览我们的应用程序时,他们将被重定向到 Azure 进行身份验证。经过身份验证后(无论是通过他们的 AAD还是通过连接到他们的 AAD的本地 AD ),通过 Web 应用程序进行的任何 API 调用都将包含一个不记名令牌。第一次看到每个 Bearer 令牌时,我们使用它来获取 Azure Graph API(代表用户)的新令牌,并查询 Graph API 以获取用户详细信息和组成员身份。当用户使用自己的用户帐户通过 UI 进行身份验证时,这一切都有效。

我们现在要做的就是让我们的客户让另一个下游应用程序(他们的下游应用程序)获得它自己的 Bearer 令牌来使用我们的应用程序。这次没有用户,所以我们正在查看客户端凭据授权流程。为此,我们的客户现在拥有他们自己的 AAD 应用程序(他们的 AAD 应用程序),该应用程序位于他们的 AAD中(已如上所述获得同意)。他们的下游应用程序可以获得一个 Bearer 令牌来访问我们的应用程序。但是,当我们尝试获取 Azure Graph API 的令牌(代表他们的下游应用程序)时,它会失败并显示我在上面粘贴的错误消息。

更新 2

我团队的另一位成员进行了一些调查,这些是他的发现。

我通过查看 SDK 在幕后执行的操作并手动执行所有请求以更好地允许它重现我们正在执行的操作,从而手动完成了该过程。

因此调用服务(这是在 Azure Active Directory 中设置的 Web 应用程序)从 Azure 获取 OAuth 令牌,即

我们得到一个有效的令牌,其中包含appid, tid, oid,iss等,但不包含name, upn等(因为它不是用户而是应用程序)。

那么我们想从 Graph API 中查找服务主体的详细信息,并代表应用程序请求获取 Graph API 令牌,即

这基本上是我们调用以下代码时发生的情况(从 SDK 代码中提取)

它返回的只是:

所以我想问题是,如果调用者是 web/native 应用程序而不是实际用户,我们能否代表调用者使用持有者令牌获取图形 API 令牌?

0 投票
1 回答
1409 浏览

c# - Azure AD Graph 调用用户创建失败并出现一些模糊的错误

我被告知在这里提出一个关于 Azure AD Graph Api 的问题,而不是将其作为相应 GitHub 示例存储库的问题提出,我希望 Azure Graph API 团队监控 SO 并可以帮助我们解决这个 github 示例问题

该问题的一些额外背景:

我们正在使用 Microsoft.Azure.ActiveDirectory.GraphClient nuget 在我们的 Azure AD 测试租户中创建和管理用户。按照这个示例应用程序 ,我们可以通过 Graph API 在 Azure AD 中创建和更新用户。直到大约 2-3 天前发生的某个时刻之前都很好(不确定确切的时刻,我们在周二早上 AU 时间发现了问题。最后一次成功运行是在上周五)。它是 100% 的工作代码,并且确认它不是我们的代码 - 我再次运行了示例应用程序 - 它现在也坏了。我已经使用最新的 GraphClient v2.1.0 和来自示例应用程序的原始版本 - v2.0.6 对其进行了测试

为了简化对问题的测试,我制作了一个基于 LINQ 的示例,其中包含一些秘密(如果您想运行它,您需要按照控制台应用程序示例指南输入您的值,而不是原始示例应用程序)另外这里是 Fiddle捕获(编辑)的

提琴手捕获中需要注意的几件事 - Azure AD Graph API 不返回刷新令牌以及访问令牌:

我可以在这里看到范围字符串的问题,但是当按照示例应用程序调用令牌时,我们没有在 GraphClient 中设置任何显式范围(正如我之前提到的,这段代码之前很好)

用户创建响应清楚地说明发生了什么以及为什么会发生

但目前尚不清楚如何通过任何这些AuthenticationContext.AcquireToken 方法重载来请求额外的权限范围。 同样奇怪的是,相同的代码之前功能齐全,现在在一些神秘的变化之后被破坏了?

所以我有几个问题:

  1. 如何在 GraphClient 库中添加额外的范围权限以在启用用户修改的情况下获取 Graph API 令牌。这可能是问题的创可贴解决方案。

  2. 看起来 Azure AD 尝试在门户中管理客户端应用程序的权限。但是对于 Native Client 类型的应用程序没有额外的权限。如何显式更新应用程序权限,以便现有代码可以再次工作。有可能吗?

  3. 任何人都可以推荐其他库与 GraphAPI 进行交互,从而允许消费者明确指定所请求令牌的范围吗?

================更新=================

是的,我看到了同意流程文档。为了解决这个问题,我创建了新的 Azure AD 租户,添加了全新的应用程序并添加了所有可能的权限,包括所有可用的应用程序和委托权限: 现在看起来像这样。我也

我可以得到一个范围很长的令牌,例如

Directory.AccessAsUser.All Directory.Read Directory.Write User.Read User.ReadWrite User.Read.All User.ReadBasic.All User.ReadWrite.All user_impersonation UserProfile.Read

--切掉不相关的范围--

但它仍然给我 403 :

值得注意的一件事 - 在范围列表中没有Directory.ReadWrite.All

但是这里的文档说Directory.ReadWrite.All:读写目录数据

================更新=================

PS:Azure AD 工程师的一些技术请求信息:

  • 身份验证请求响应具有客户端请求 ID:88b2bbbd-94cd-498d-a147-caad05e16eb7。
  • 失败的 Graph 调用仅在响应中具有 client-request-id: 882f3918-0ddd-40fe-a558-866997e32b46
0 投票
1 回答
1731 浏览

azure - Azure AD:AADSTS50003:未配置签名密钥

我将 azure AD 配置为我组织应用程序的身份提供者

如以下博客中所述

使用 Azure AD 自助服务 SAML 配置自带应用

我在活动目录下创建了一个应用程序并配置了单点登录(SAML2),如下所示

每当我尝试访问应用程序时,它都会将请求重定向到 azure login。但我收到一个错误的请求错误,并显示以下消息

每当我尝试访问我的应用程序时,它都会将我重定向到 azure 登录页面。它要求我登录,如果我尚未登录并且登录后会引发上述错误。如果我已经登录;错误直接显示

我是否在配置中遗漏了什么

0 投票
1 回答
95 浏览

authorization - Azure Graph API 的 OData 查询?

有人可以帮助对 Azure GraphAPI 上的 isMemeberOf API 进行 OData 查询吗

这是参考: https ://msdn.microsoft.com/en-us/Library/Azure/Ad/Graph/api/functions-and-actions#isMemberOf

我正在寻找能够在演示 https://graphexplorer.cloudapp.net/Home/Index/DemoCompany上运行的示例 oData 查询

对于以下场景:“groupId”:“5e624f44-d38d-4943-b07c-2bad078f52ff”,“memberId”:“ea59e4d3-a7a1-4b5b-b65f-a25fcc0c0f99”

想知道是否可以使用组名和 memberId 进行查询,如下所示

“displayName”:“SampleSecurityGroup”,“memberId”:“ea59e4d3-a7a1-4b5b-b65f-a25fcc0c0f99”

提前致谢。

0 投票
2 回答
434 浏览

authentication - 使用 Azure AD 在 WebApp WebApi 身份验证中进行令牌验证?

处理 WebApp <=> WebApi 身份验证方案,我从 WebApp 中的 Azure AD 获取 JWT 令牌并将其传递给 WebApi。在 WebApi 中,从 WebApp 的令牌生成 Azure GraphAPI 的访问令牌,以调用 GraphAPI 进行授权。

WebApp 和 WebApi 都在 Azure 租户门户上注册为单个应用程序,因为 WebApp 和 WebApi 的用户身份验证相同。

这是一个 Intranet 应用程序,对 AD 中的所有用户开放。与令牌验证或身份验证相关的几个问题。

  1. 我是否需要在 WebApp 和 WebApi 的令牌中验证租户和受众?
  2. 我还需要在 WebApp、WebApi 或两者中执行哪些其他令牌验证?

因为 JWT 令牌是经过数字签名和加密的。当令牌从 WebApp 传递时,不在 WebApi 中进行验证会产生什么影响?

请指教。

0 投票
1 回答
348 浏览

php - 通过 azure graph api 更新时权限不足,无法完成操作

我正在尝试通过图形 api 在 azure 中更新用户配置文件。当涉及“移动”属性时,我收到异常:“权限不足,无法完成操作”。使用相同部分的 PHP 代码成功更新了许多属性,例如 city、streetAddress 或 phoneNumber。这是配置/架构问题吗?

0 投票
1 回答
13292 浏览

azure - 本地 Active Directory ObjectId 与 Azure Active Directory ObjectId 不同

我们有一个与我们的 azure 活动目录同步的本地活动目录。组是在本地 AD 中创建的,当我在“属性编辑器”选项卡中查看 objectGUID 时,我看到一个值,但是当我尝试在Azure Graph API 中使用该值来获取组时(发生同步后)我得到这个

有没有办法在同步期间使本地 guid 与 azure objectId 相同?还是这两个领域不相关?

0 投票
1 回答
1850 浏览

azure - 使用 Azure Graph API 更改过期密码

我有以下 Python 代码来对 Graph API 进行身份验证

如果我有密码已过期的用户,我会收到响应(如预期的那样):

Graph API 提供了使用端点来重置密码,但要这样做,我需要一个有效的令牌(向文档中提到的端点发出 PATCH 请求),因为我无法登录,所以我没有。

使用 Azure Graph API 在到期时更改用户密码的正确方法是什么?

0 投票
1 回答
10910 浏览

c# - 无法从 Azure AD 获取不记名令牌以与 API 应用程序一起使用

我有一个 MVC 应用程序需要访问受 Azure AD 身份验证保护的 Azure 中的私有 API 应用程序。所以我需要获取 Azure AD 承载令牌,将其转换为Zumo-Auth令牌并使用它来访问 API 应用程序。

我正在阅读本教程,一切正常,直到我需要从authContext. 这是代码片段:

与 的行authContext.AcquireToken(appIdUri, credential)是引起麻烦的行。

如果appIdUri我给https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/login/aad,我得到例外:

400: AdalServiceException: AADSTS50001: Resource ' https://MyAppGateway-814485545465FAKE4d5a4532cd.azurewebsites.net/login/aad ' 没有为该帐户注册。

但是这条确切的行在Reply UrlAD 应用程序的列表中

Azure AD 应用程序中的回复 URI

当我尝试使用https://MyADDomain.onmicrosoft.com/MyAppName或收到不同的异常消息时:https://MyADDomain.onmicrosoft.com/appIdUri

400:AdalServiceException:AADSTS50105:应用程序“04472E33-2638-FAKE-GUID-F826AF4928DB”未分配给应用程序“ https://MyADDomain.onmicrosoft.com/MyAppName ”的角色

或者

400:AdalServiceException:AADSTS50105:应用程序“04472E33-2638-FAKE-GUID-F826AF4928DB”未分配给应用程序“ https://MyADDomain.onmicrosoft.com/ ”的角色

在这两种情况下,我都App ID URI将 AD 应用程序中的设置为“ https://MyADDomain.onmicrosoft.com/MyAppName ”或“ https://MyADDomain.onmicrosoft.com/ ”。以及列表中的两个名称Reply URL

最终,经过足够多的尝试,我将https://graph.windows.netas放入appIdUri并取回了不记名令牌。但是令牌的有效期是过去的(大约过去 1 分钟)。所以我对此无能为力。并401-Unauthenticated在尝试使用令牌登录 API 应用程序时得到。

我错过了什么?