如何配置 Azure AD 权限以从 WebJob 控制台应用程序访问 Microsoft Graph?

How to configure Azure AD permissions to access Microsoft Graph from the WebJob console app?

我无法在 WebJob(基本上是控制台应用程序)中访问 Microsoft Graph。当我尝试从 AD 中获取用户时出现 "Insufficient privileges to complete the operation" 错误。

我正在构建一个预定的网络作业,它应该不时同步用户详细信息。为此,我连接到图表,获取用户。 如果我代表用户使用真实用户令牌进行身份验证,则相同的代码可以正常工作,但它需要用户打开 Web 应用程序并单击按钮。

我有要连接的应用程序 ID 和密码,但它是过去为 Web 应用程序本身生成的。它应该在我的场景中工作还是我应该生成一个单独的 Id/secret 并以不同的方式配置它。

这是一些代码:

var pages = activeDirectoryClient.Users.Where(adItem => adItem.Mail == o.Email).ExecuteAsync().Result;


var activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await GetTokenAsync(authContext, azureAdParameters.UserObjectId, azureAdParameters.HostUrl));

ActiveDirectoryClient 用于获取用户数据,但它来自 Microsoft.Azure.ActiveDirectory.GraphClient 它需要 Microsoft Graph API 权限还是 Azure AD Graph API 权限?

谢谢

您的旧 Web 应用程序注册似乎缺少所需的应用程序权限。所以我的建议是:

  1. 在 Azure AD 中注册一个新的应用程序;
  2. 为其授予 Microsoft Graph API 权限(应用程序):User.Read.All 和 Directory.Read.All;
  3. 为新的应用程序注册生成新的客户端密码;
  4. Re-configure 您的 WebJob 使用新的应用程序客户端 ID 和密码。

希望对您有所帮助。

WebJob 不是 public 客户端 - 它是机密客户端。当它需要获取令牌并且它知道如何保护秘密时,没有用户在场进行身份验证(这是机密客户端的定义)。它需要自己进行身份验证。你需要给它适当的 Application 权限(User.Read.All 是一个 delegated 权限 - 它不会起作用),让他们同意如果管理员需要,并使用 AcquireToken 方法,该方法使用 ClientCredentials(应用程序 ID 和对称密钥,或者更好的 X509 证书)。