我如何利用 Azure AD B2C 通过 REST API 创建和管理用户?

How can I leverage Azure AD B2C to create and manage users through a REST API?

我正在尝试在微服务架构中创建应用程序。我目前正在尝试找出身份验证和授权部分。我做了一些研究并选择了 Azure AD B2C 作为身份提供者。

我现在想要的是一种通过 REST API 在我的 Azure AD B2C 中创建用户的方法,我将向我的客户(Web 应用程序和移动客户端)公开。一段时间以来,我一直在探索 Azure AD B2C 文档 (https://docs.microsoft.com/en-us/azure/active-directory-b2c/),甚至是 Azure AD B2C 界面,但我能够找到的有关登录和注册的所有信息都与允许用户相关通过带有公司品牌的可自定义页面执行这些操作。

这不是我需要的。我想在 API 网关后面公开几个服务,并允许我的客户端应用程序执行我的用户的创建和管理。我希望我的移动团队能够呼叫我的 API、注册用户、执行登录并能够访问其他业务相关服务,甚至不知道我是否在使用 Azure AD B2C。但到目前为止,我无法找到任何允许我这样做的 Azure AD B2C API。我可以通过 Microsoft Azure AD B2C 实现这一目标,还是应该开始研究其他云身份提供商?

如果想用RestAPI管理Azure AD B2C用户,可以使用Microsoft GraphAPI来实现。详情请参考document and the document

例如

  • 注册申请

    1. 登录到 Azure 门户。
    2. Select 门户工具栏中的 目录 + 订阅 图标,然后 select 包含您的 Azure AD B2C 租户的目录。
    3. 在 Azure 门户中,搜索 select Azure AD B2C.
    4. Select 应用注册(预览),然后 select 新注册。
    5. 输入应用程序的名称。例如,managementapp1.
    6. Select 仅限此组织目录中的帐户
    7. 权限下,清除授予管理员同意 openid 和 offline_access 权限复选框。
    8. Select 注册.
    9. 记录出现在应用程序概览页面上的应用程序(客户端)ID。您将在后面的步骤中使用该值。
  • 授予 API 权限

    1. 根据管理、select API 权限.
    2. 配置的权限下,select 添加权限
    3. Select Microsoft APIs 选项卡,然后 select Microsoft Graph.
    4. Select 应用程序权限.
    5. 展开适当的权限组和 select 权限的复选框以授予您的管理应用程序。例如:目录 > Directory.ReadWrite.All:用于用户迁移或用户管理场景。
    6. Select添加权限。按照指示,等待几分钟再继续下一步。
    7. Select 授予管理员同意(您的租户名称)
    8. Select 您当前登录的管理员帐户,或使用至少分配了云应用程序管理员角色的 Azure AD B2C 租户中的帐户登录。
    9. Select 接受.
    10. Select 刷新,然后确认 "Granted for ..." 出现在状态下。传播权限可能需要几分钟时间。
  • 创建客户端密钥

    1. 管理下,select 证书和机密
    2. Select 新 客户端密码.
  • 获取访问令牌

POST https://login.microsoftonline.com/<your b2c tannat name >/oauth2/v2.0/token 

Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=<your sp appId>
&client_secret=<you sp password>
&scope=https://graph.microsoft.com/.default
  • 创建用户
POST https://graph.microsoft.com/v1.0/users
Content-type: application/json
Authorization: Bearer <access_token>

{

      "displayName": "[TEST] Bridgette Harmon (Local account)",
      "givenName": "Bridgette",
      "surname": "Harmon",
      "identities": [
        {
             "signInType": "userName",
             "issuer": "<your b2c tenant>",
            "issuerAssignedId": "Bridgette"
        }
      ],

      "passwordProfile" : {
          "password": "password-value",
          "forceChangePasswordNextSignIn": false
        }
    }

和您一样,我正在寻找一种集中方式来保留我的用户并从多个应用程序或 api 执行单点登录。从成本基础的角度来看,与 Azure AD 相比,我目前倾向于开发自己的身份提供者。祝你好运。

要放大@JimXu 的答案,请使用此 client 作为示例。

"This approach is similar to a service account scenario where the application acts as itself, not as a user that signed-in via an interactive user login. This is done by using the OAuth 2.0 client credentials grant."