7

到目前为止,我还无法使用 bot 框架来解决这个问题。我花了一整天的时间,但只设法获得与 AD B2C 合作的.net api 示例 ( https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet )。我不确定它在哪里获取我想传递给 BotUserData 的不记名令牌......

我试过关注https://azure.microsoft.com/en-us/blog/bot-framework-made-better-with-azure/

但实际上该解决方案没有成功构建,我只是从那里获取代码并进入我的机器人框架示例模板....但是,当它要求我通过 MS 登录并且我这样做时,我无法继续,该博客似乎没有使用 AD B2C 策略。

那么如何将 AD B2C 与 Bot Framework 集成?是否可以从 bot 框架调用 /Account/SignIn URL 来验证用户身份?之后,您将如何捕获令牌并将其传递给 BotUserData?

4

2 回答 2

7

您可能需要查看Facebook Auth 示例,以了解 Auth 场景的潜在流程。对于 Azure AD,您需要执行类似的流程。

假设您的用户向您的机器人发送“登录”消息。bot 应该使用 auth URL 进行响应,并要求用户使用该 URL 登录服务。为此,您可以使用 ADAL 的GetAuthorizationRequestURL方法。

然后,您将拥有一个 Web API,它基本上会公开一个端点,该端点将是 Azure AD 的回复 URL。用户完成登录后,将向您的 Web API 发布一条消息,您将能够在其中获取授权代码并执行调用以获取访问令牌。之后,您可以在Facebook 示例 Web API中执行相同操作,包括恢复与 Bot 的对话,发送带有访问令牌的消息(因此可以将其保存在 PerUserInConversationData 包中(检查行代码) )。

之后,您可以使用访问令牌来执行任何需要访问令牌的调用。

更新

您可能需要查看两个新示例,因为它们正在实施正在讨论的工作流程。

希望这可以帮助。

于 2016-05-03T11:15:10.263 回答
1

按照本教程进行 Bot 端代码开发,我在这里关注 B2C 和 Azure 级别的配置:

OAuth 连接

客户端 ID 这取自 B2C 应用程序属性中的应用程序 ID 字段。它相当于从任何其他 AAD 应用注册中获取的 Microsoft 应用 ID。

Azure 中 B2C 配置中的客户端 ID

客户端密码 这是使用本教程中的步骤生成的。

选择密钥,然后单击生成密钥。选择保存以查看密钥。记下 App 键值。您在应用程序代码中使用该值作为应用程序密码。

在机器人通道注册的 oAuth 设置中使用 AAD V2 配置 - 新的 oauth 连接设置。

AAD V2 配置页面。

按照我们从中获得的步骤和值填写上述详细信息。

授权/令牌/刷新 URL

我跟着这个

https://login.microsoftonline.com/tfp/ //oauth2/v2.0/authorize

对于授权 URL 和

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

用于令牌和刷新 URL。

因为我使用了 URL 格式 (kyleorg.onmicrosoft.com) 而不是 GUID 格式,但使用 GUID 似乎也有效。

是用户流的名称,例如 B2C_1_userflow。我用本教程创建了一个。

范围 使用范围 openid offline_access 我能够成功登录,但令我惊讶的是,返回的令牌是空的。

在此处输入图像描述

然后我发现这个文件建议使用客户端 ID 本身作为范围。

当我在 Scopes 字段中重用 Client id 字段中的值时,会成功返回一个令牌,并且我的机器人能够使用该连接。

在此处输入图像描述

您可以根据需要将其与其他范围组合,但为了实验,我强烈建议首先使用最简单的实现。

让我知道这些说明是否有效,如果无效,我们将看看不同之处在于我们如何设置 B2C 应用程序。作为奖励,我应该提到,在您获得令牌后,您可以将其粘贴到https://jwt.ms/以对其进行解码,并查看它是否正确识别您的 B2C 用户。粘贴新令牌时始终刷新页面,以确保它不会一直向您显示上一个令牌的信息。

提到了这个文件

于 2020-05-13T08:50:26.223 回答