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

时间:2019-06-21 13:01:24

标签: azure azure-active-directory microsoft-graph azure-webjobs

我无法在WebJob(基本上是控制台应用程序)内部访问Microsoft Graph。尝试从AD提取用户时,出现“权限不足,无法完成操作”的错误。

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

我有要连接的应用程序ID和密码,但是它是过去为Web应用程序本身生成的。它是否应该在我的方案中起作用,还是我应该生成一个单独的ID /秘密并以其他方式对其进行配置。

以下是一些代码:

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权限?

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

希望有帮助。

答案 1 :(得分:0)

WebJob不是公共客户端-它是机密客户端。当需要获取令牌时,无需用户进行身份验证,并且知道如何保护机密(这是机密客户端的定义)。它需要自己进行身份验证。您需要为其授予适当的 Application 权限(User.Read.All是已授权的权限-它将不起作用),如果管理员需要,请征得他们的同意并使用使用ClientCredentials(应用程序ID和对称密钥,或者最好是X509证书)的AcquireToken方法。