我参加聚会很晚,但是我想在这里发帖,以防其他人可以使用此信息。我们遵循以下步骤,使用普通的“自定义策略”返回JWT令牌。请注意创建Azure AD B2C应用程序下的步骤4-5和配置Salesforce身份验证下的步骤8。提供商,它们将从Azure AD B2C撤回访问令牌。
创建Azure AD B2C应用程序
- 登录到您希望连接的Azure AD B2C实例。
- 转到应用。点击 +添加。
- 添加 https://www.salesforce.com 作为回复URL 。点击创建。
- 选择刚创建的新应用。保存应用程序ID 。
- 点击发布范围。添加 read 作为范围。点击保存。
- 保存全范围值。
- 点击 API访问权限。点击 +添加。在选择API 下,选择应用程序的名称。在选择作用域下,确保选择读取和用户假冒。
- 点击确定。从左侧导航栏中选择键。点击 +生成密钥。点击保存。
- 检查所生成的应用密钥的值。如果它包含“ /”,“?”,“&”或“%”(可能还有更多无效字符),请删除生成的密钥并重复步骤8和9,直到生成有效密钥为止。保存有效密钥。
配置Salesforce身份验证。提供程序
- 登录到Salesforce。转到设置。在快速查找框中,键入 Auth 。选择身份验证。提供者。
- 点击新建。
- 在提供商类型下,选择 Open ID Connect 。
- 添加内容丰富的名称。登录时,这将作为选项显示给用户。Salesforce将生成URL后缀。
- 将“创建Azure AD B2C应用程序”的第4步中的应用程序ID 放在消费者密钥中。将“创建Azure AD B2C应用程序”的第9步中的应用程序密钥放在“消费者机密” 中。
- 检索要与之集成的Azure AD B2C自定义策略的OpenID Connect发现端点。可以在https:// {tenant-id} .b2clogin.com / {tenant-id} .onmicrosoft.com / v2.0 / .well-known / openid-configuration?p = {policy-id }。
- 使用发现端点中的authorization_endpoint字段作为Salesforce中的授权端点URL 。将发现端点中的token_endpoint字段用作Salesforce中的令牌端点URL 。将发现端点中的颁发者字段用作Salesforce中的令牌颁发者。
- 在“ 默认范围”中,放置“创建Azure AD B2C应用程序”的步骤6中的完整范围值。在末尾添加“ read”。 (最终值应如下所示:https:// {tenant-id} .onmicrosoft.com / {application-name} / read openid)
- 对于注册处理程序,请按照以下说明执行步骤11:https://help.salesforce.com/articleView?id=sso_provider_openid_connect.htm&type=5
一种。请注意,以防链接更改。您可以使用以下GitHub存储库中的代码创建新的注册处理程序:https://github.com/salesforceidentity/social-signon-reghandler/blob/master/SocialRegHandler.cls。您可能需要添加u.CompanyName ='CompanyName';在prepareUserData方法中。
- 在这里暂停,我们将返回令牌发行人。
设置虚拟用户信息端点
- Salesforce需要一个用户信息端点。 Azure AD B2C不提供一个。您可以使用此GitHub存储库中的代码创建用户信息端点的版本:https://github.com/azure-ad-b2c/samples/tree/master/policies/user_info
- 此代码将仅返回用户令牌上的声明。我们决定修改代码以在Azure函数中运行。
- 无论采用哪种解决方案,都应以REST终结点结束。将该REST端点放置在Auth的令牌颁发者字段中。 Salesforce中的提供商。
- 点击保存。
授权Azure AD B2C应用程序中的回调URL
- 单击在上述步骤中配置的身份验证提供程序。
- 在 Salesforce配置下,保存单一注销URL 。
- 展开社区,并保存要在其中启用SSO的社区的回调URL 。
- 返回到Azure AD B2C。导航至应用注册(预览)。点击所有应用。
- 选择在“创建Azure AD B2C应用程序”中创建的应用程序。点击身份验证。
- 点击添加URI 。在步骤3中添加回调URL 。在步骤2中使用单个注销URL 更新注销URL 。点击保存。
您是否可以使用 curl 在终端中测试此登录终结点,以确保其返回令牌?
curl -v https://<Azure login endpoint> -d "grant_type=password" -d "username=user@login.demo" -d "password=password"
您可能需要向curl的Azure命令添加其他参数(也许添加客户端ID和客户端密钥?