【问题标题】:How can I leverage Azure AD B2C to create and manage users through a REST API?如何利用 Azure AD B2C 通过 REST API 创建和管理用户?
【发布时间】:2020-07-05 02:07:04
【问题描述】:
我正在尝试在微服务架构中创建应用程序。我目前正在尝试找出身份验证和授权部分。我做了一些研究并选择了 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 实现这一目标,还是应该开始寻找其他云身份提供商?
【问题讨论】:
标签:
azure
authentication
microservices
azure-ad-b2c
identity
【解决方案1】:
如果你想用 Rest API 管理 Azure AD B2C 用户,你可以使用 Microsoft Graph API 来实现。更多详情请参考document和document
例如
-
注册申请
- 登录 Azure 门户。
- 选择门户工具栏中的目录+订阅图标,然后选择包含您的 Azure AD B2C 租户的目录。
- 在 Azure 门户中,搜索并选择 Azure AD B2C。
- 选择应用注册(预览版),然后选择新注册。
- 输入应用程序的名称。例如,managementapp1。
- 选择仅此组织目录中的帐户。
- 在权限下,清除授予管理员对 openid 和 offline_access 权限的同意复选框。
- 选择注册。
- 记录显示在应用程序概览页面上的应用程序(客户端)ID。您将在后面的步骤中使用此值。
-
授予 API 权限
- 在管理下,选择API权限。
- 在已配置权限下,选择添加权限。
- 选择 Microsoft APIs 选项卡,然后选择 Microsoft Graph。
- 选择应用程序权限。
- 展开相应的权限组并选中要授予您的管理应用程序的权限复选框。例如:Directory > Directory.ReadWrite.All:用于用户迁移或用户管理场景。
- 选择添加权限。按照指示,等待几分钟,然后再继续下一步。
- 选择为(您的租户名称)授予管理员同意。
- 选择您当前登录的管理员帐户,或使用您的 Azure AD B2C 租户中至少分配了云应用程序管理员角色的帐户登录。
- 选择接受。
- 选择刷新,然后验证“Granted for ...”是否出现在“状态”下。传播权限可能需要几分钟时间。
-
创建客户端密码
- 在管理下,选择证书和机密。
- 选择新建客户端密码。
获取访问令牌
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
}
}
【解决方案2】:
和您一样,我正在寻找一种集中方式来留住我的用户并从多个应用程序或 api 执行单点登录。从成本的角度来看,我现在倾向于开发自己的身份提供程序而不是 Azure AD。祝你好运。
【解决方案3】:
要放大@JimXu 的答案,请以client 为例。
“这种方法类似于服务帐户场景,其中应用程序充当自己,而不是作为通过交互式用户登录登录的用户。这是通过使用 OAuth 2.0 客户端凭据授予强>。”