为 MSTeams 机器人请求访问令牌
Requesting an access token for an MSTeams bot
我正在尝试获取 accessToken 以在我自己的自定义机器人中使用。我基于我尝试建立的请求基于以下内容:
具体要求:
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 调用中使用这些值。
我正在尝试获取 accessToken 以在我自己的自定义机器人中使用。我基于我尝试建立的请求基于以下内容:
具体要求:
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 调用中使用这些值。