Bot Framework 中auth_header的 JWT 访问令牌

JWT access token for auth_header in Bot Framework

提问人:klek_sik 提问时间:11/14/2023 最后编辑:klek_sik 更新时间:11/14/2023 访问量:36

问:

我正在开发一个 MS Teams 机器人,旨在发送消息以响应事件。例如,当机器人从外部源收到 API 消息时,它会处理信息并发送相应的消息。机器人不用于回复消息;它仅用于通知。我从一个 Python 示例开始,特别是 02.echo-bot。通过 MS Teams 向机器人发送消息时,该消息包含一个持有者令牌,可以在以下位置查看:app.py

# Listen for incoming requests on /api/messages
async def messages(req: Request) -> Response:
    # Main bot message handler.

    if "application/json" in req.headers["Content-Type"]:
        body = await req.json()
    else:
        return Response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE)

    activity = Activity().deserialize(body)

    auth_header = req.headers["Authorization"] if "Authorization" in req.headers else ""

    print("auth_header: ", auth_header)

    response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn)

    if response:
        return json_response(data=response.body, status=response.status)
    return Response(status=HTTPStatus.OK)

我正在打印以查看令牌的值:auth_header

auth_header:Bearer eyJhbGciOiJSUzI...

获取此令牌并重建 API 帖子后,我正在发送一个帖子请求,以从机器人检索消息,而无需在 MS Teams 对话中启动消息。请求正文如下所示:

{
    "conversation": {
        "id": "<CONVERSATION ID>"

    },
    "serviceUrl": "https://smba.trafficmanager.net/amer/",
    "text": "bot",
    "status": "stopped",
    "type": "message"
}

问题是令牌过期了,我想以发送消息以外的方式获取它,因为机器人的目的只是发送通知。 我按照使用 Bot Connector API 进行身份验证的说明进行操作,但它始终返回:

botbuilder.schema._models_py3。ErrorResponseException:操作返回无效状态代码“未经授权”

JWT BotFramework Microsoft-Teams

评论

0赞 Sayali-MSFT 11/20/2023
当机器人的身份验证设置出现问题时,通常会发生此错误。在机器人配置文件中检查机器人的应用 ID 和密码,并确保它们与 Bot Framework 门户中的内容匹配。此外,请验证机器人的设置中是否使用了正确的 Microsoft 应用 ID 和 Microsoft 应用密码。如果使用 .env 文件来存储这些值,请确保在机器人代码中正确引用它们。如果问题仍然存在,请尝试在 Azure 门户中重新生成应用密码,并在机器人的配置中更新它。

答: 暂无答案