为 MSTeams 机器人请求访问令牌

Requesting an access token for an MSTeams bot

我正在尝试获取 accessToken 以在我自己的自定义机器人中使用。我基于我尝试建立的请求基于以下内容:

https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-connector-authentication?view=azure-bot-service-4.0

具体要求:

POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=MICROSOFT-APP-ID&client_secret=MICROSOFT-APP-PASSWORD&scope=https%3A%2F%2Fapi.botframework.com%2F.default

我在弄清楚我的 client_secret 和 client_id 到底是什么以及我应该从哪里提取它时遇到了问题。我尝试了两种不同的方法,但我越深入,就越让自己感到困惑。

首先,我尝试使用从 Visual Studio Teams toolkit 创建的基本 hello world bot,非常老套的方法,但我只是将 localsetting 文件中定义的 botEndpoint 更改为仅指向我的自定义 bot 侦听的服务上。

"bot": {
        "skipNgrok": true,
        "botDomain": "domain",
        "botEndpoint": "bot endpoint",
        "botId": "id",
        "botPassword": "password",
        "botAadObjectId": "AadId"
    }

然后我刚刚发布了这个机器人,我可以看到每个请求都进来了,但是当我尝试使用这里生成的 botPassword 和 botId 来尝试请求 accessToken 时,我只是收到一个 400 Bad request 错误作为响应。

从这里开始,我尝试用我在 Azure 应用程序注册中看到的以下 ID 替换客户端 ID:应用程序(客户端)ID/Object ID/Directory(租户)ID。

对于其中的每一个,我还尝试在应用程序注册中添加一个新的密钥,并在工具包生成的密钥上使用这个密钥,我只收到 400 或 404 错误,其中 404 来自我在应用程序注册中生成的秘密(我假设这与它使用的特殊字符有关)

从这里开始,我尝试 register a bot 作为 azure 内部的资源,并希望从那里开始,而不是让工具包为我生成它。我尝试在此处使用 Microsoft App ID 和 App Tenant ID 作为客户端 ID,同时还生成新的密钥并使用它们,但我仍然无法得到响应。

我在这里明显遗漏了什么吗?

MicrosoftAppId是Azure Bot资源对应的clientId。您可以在 Azure 机器人的设置下的配置边栏选项卡下找到它。 MicrosoftAppPassword 是你的密钥,通常存储在你创建 Azure Bot 资源时在同一资源组中创建的密钥保管库中。根据您的帐户类型和访问权限,您可以尝试从密钥库中 retrieve the key

如果您无法通过这种方式获取密钥,您也可以使用 Azure CLI 按照 deploy a new multi-tenant bot 的说明进行操作。在按照这些说明进行操作时,您将提供自己的密码,Azure 将在其响应之一中为您提供 AppId。然后,您可以在 REST 调用中使用这些值。