我正在查看示例代码 https://github.com/Azure-Samples/active-directory-dotnet-graphapi-console
似乎无论我们为应用程序或用户获取AD客户端,都需要得到用户的同意。考虑到用户可以提供客户端ID或任何其他密码/秘密,我们是否可以在未经用户同意的情况下使用图形api?
我正在处理应该在后台运行为Windows服务的项目。如果它需要一段时间的同意,那么我们可能不能使用Windows服务。
由于
答案 0 :(得分:0)
不,向应用程序添加委派权限不会自动同意租户内的用户。除非管理员单击Azure门户中应用程序页面的Grant Permissions
部分中的Required Permissions
按钮以执行管理员同意,否则用户仍必须在运行时手动同意添加的委派权限。在该代码示例中,如果您选择在应用程序模式下运行控制台应用程序,则管理员用户需要同意应用程序权限。
请点击here了解有关用户和管理员同意的更多详细信息。
在您的方案中,您可以使用Client Credentials Grant Flow允许Web服务(机密客户端)使用自己的凭据而不是模拟用户。添加Azure AD Graph api的权限后,单击Azure门户中具有管理员帐户的应用程序页面的Grant Permissions
部分中的Required Permissions
按钮。在管理员同意后,您可以使用应用程序的身份获取Graph API的令牌,并且不会在运行时被要求同意。 Code samples使用客户端凭证流程供您参考。
答案 1 :(得分:0)
正如@Nan Yu所述,您可以使用目录的管理员帐户来获取授予权限。此外,还有另一种解决方案。它位于您发布的链接的底部。我在我的测试实验室试过它并且有效。解决方案在这里:
如果你想在应用程序模式下运行控制台应用程序(这有点人为,因为这真的应该作为本机客户端运行),你需要事先手动强制同意。在这里,管理员用户需要同意。您可以通过打开浏览器强行同意,转到以下网址,将tenantId
替换为 tenantId ,将app-mode-application-id
替换为应用程序ID 对于您的应用模式应用:
https://login.microsoftonline.com/<tenantId>/oauth2/authorize?client_id=app-mode-application-id>&response_type=code &redirect_uri=http%3A%2F%2Flocalhost%2F&response_mode=query &resource=https%3A%2F%2Fgraph.windows.net%2F&state=12345
登录后(如果尚未登录),请点击同意页面中的接受。然后,您可以关闭浏览器。既然您已经预先同意,您可以尝试在应用模式下运行控制台示例。