【问题标题】:How to configure Azure AD permissions to access Microsoft Graph from the WebJob console app?如何配置 Azure AD 权限以从 WebJob 控制台应用程序访问 Microsoft Graph?
【发布时间】:2019-06-21 13:01:24
【问题描述】:

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

我正在构建一个计划的网络作业,它应该不时同步用户详细信息。为此,我连接到图表,获取用户。 如果我代表用户使用真实用户令牌进行身份验证,则相同的代码可以工作,但它需要用户打开 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 权限?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 听起来合理而清晰。谢谢,会试试的。还打算询问管理员同意选项-从技术上讲,它只是一个复选框,不能签署受信任的权限,或者它需要对 API 的额外调用,正如我在本机调用实现中看到的那样-第一个 http 调用确认同意,第二个得到令牌?暂时 - 我正在使用 context.AcquireTokenAsync(GraphResourceId, clientCredentials) 获取令牌。它正确地得到它,当我尝试从 AD 获取用户时失败,上述异常看起来像你提到的权限问题。
    • 管理员可以通过 Azure 门户授予同意。或者,本文介绍了如何使用登录链接获得对 API 的同意:docs.microsoft.com/en-us/skype-sdk/trusted-application-api/docs/…(将客户端和回复 uri 替换为您的数据)。您需要管理员才能使用该链接登录并同意。
    • 谢谢。一切(几乎)都奏效了。我不得不更改客户端,这是错误的 Azure AD Graph Client 而不是 MS Graph Service Client。因此,在授予权限的情况下,它会连接并获取用户。只有一个问题,几乎所有信息都是空的,但应该包含例如地址..现在我只有联系电话号码和电子邮件,姓氏..它可以连接到任何其他权限还是在通过 MS Graph 和 Azure AD Graph 获取时有不同的数据?谢谢
    【解决方案2】:

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

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

    希望对你有帮助。

    【讨论】:

    • 谢谢。一切(几乎)都奏效了。我不得不更改客户端,这是错误的 Azure AD Graph Client 而不是 MS Graph Service Client。因此,在授予权限的情况下,它会连接并获取用户。只有一个问题,几乎所有信息都是空的,但应该包含例如地址..现在我只有联系电话号码和电子邮件,姓氏..它可以连接到任何其他权限还是在通过 MS Graph 和 Azure AD Graph 获取时有不同的数据?谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 2017-12-14
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多