【问题标题】:How to create users using Microsoft Graph API (from Graph explorer and Java application)如何使用 Microsoft Graph API 创建用户(来自 Graph explorer 和 Java 应用程序)
【发布时间】:2019-05-06 10:49:05
【问题描述】:

我是 Microsoft Graph API 的新手。我已经阅读了网络上的许多文章,以了解如何使用 Microosft Garph API 来管理 Azure AD 中的用户。我正在创建一个基于 Springboot 的 REST API 服务,该服务需要在 Azure AD 中创建用户。

我已在 Azure Active Directory 中注册了我的应用程序。我还拥有 Microsoft Graph API 的“Directory.ReadWrite.All”权限。我想首先尝试从 Microsoft Garph 资源管理器创建用户。在 Graph Explorer 中,我必须在请求标头中提供授权令牌。为了创建授权令牌,我已按照链接https://docs.microsoft.com/en-us/graph/auth-v2-user中给出的说明进行操作。我根据说明创建了以下URL,用于获取访问令牌。

https://login.microsoftonline.com/{mytenantID}/oauth2/v2.0/authorize?client_id=validclientID&response_type=code&redirect_uri=https://localhost:4200&response_mode=query&scope=Directory.ReadWrite.All&state=12345

当从网络浏览器访问上述 URL 时,我收到一条消息,上面写着“需要管理员批准”。我不是 Azure AD 的管理员,也无权访问我的客户端的管理员,所以我真的被卡住了。任何人都可以帮助我了解每次我需要通过 MS Graph API 访问 Azure AD 的“创建用户”功能时是否需要获得管理员的同意? .我还需要 Springboot API 中的创建用户功能。在这种情况下,管理员同意将如何工作?无论如何,创建用户功能可以在没有管理员同意的情况下工作。

在发布此问题之前,我已阅读 SO 中的以下两个问题

How can I find the Admin Consent URL for an Azure AD App that requires Microsoft Graph "Read directory data" permission?

Create user using Microsoft Graph

【问题讨论】:

    标签: azure microsoft-graph-api


    【解决方案1】:

    如果您只想在租户中创建用户,可以按照以下步骤操作:

    1. 在您的租户中创建一个新的 Azure AD 应用,要求您的租户管理员授予此应用“Directory.ReadWrite.All”权限:

    2. 为您的 Azure AD 应用创建应用机密: 使用此密钥和此 Azure AD 应用 ID 获取 access_token 以调用 Microsoft Graph API:

      请求网址:

      POST https://login.microsoftonline.com//oauth2/v2.0/token

      请求标头:

      内容类型:application/x-www-form-urlencoded

      请求正文:

    grant_type:client_credentials

    client_id:您的客户 ID

    client_secret:您的应用程序密码

    范围=https://graph.microsoft.com/.default

    您将从该 API 调用中获得一个 access_token。

    请看下面的屏幕截图:

    3.使用我们刚刚创建的access_token调用Microsoft Graph API创建用户:

    如您所见,用户已创建:

    如果您还有任何疑问,请随时告诉我:)

    【讨论】:

    • 我使用 Postman 创建了一个 POST 请求,但出现错误": "invalid_request", "error_description": "AADSTS900144: 请求正文必须包含以下参数:'grant_type'。我已经按照您的建议给出了请求正文中的所有值
    • 是的,提供这个grant_type=client_credentials。我已经更新了答案,请再看一次。如果您有任何问题,请告诉我。
    • 我确认我已经在 Postman 的请求正文中给出了 grant_type。当请求正文中存在grant_type 时,我不明白为什么会收到此错误。
    • 当我将grant_type 作为正文中的第一个键时,它起作用了。奇怪的!。我会在尝试其他步骤后更新您。
    • 是的,它的格式,你必须照原样遵循它。我还通过屏幕截图更新了答案以供您理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多