首页 > 解决方案 > Bot 框架不返回 JWT

问题描述

我正在为 Microsoft Teams 构建一个应用程序,该应用程序要求用户在机器人对话框或消息扩展中登录。整个登录过程运行良好。我正在通过检索令牌BotFrameworkAdapter.getUserToken(),如果没有可用的令牌,将提示用户基于BotFrameworkAdapter.getSignInLink().

通常,令牌是 JWT。这使我能够解码声明并验证它是否包含当前使用该应用程序所需的所有范围。如果将来我要添加 Graph API 权限(例如,对于新功能),我可以提示用户再次登录,这样应用程序就不会因为已使用较少权限登录的用户而中断。

从最近开始,越来越多的代币不再以普通 JWT 的形式发行。相反,它们看起来类似于Graph API 文档中的示例

EwAoA8l6BAAU7p9QDpi/D7xJLwsTgCg3TskyTaQAAXu71AU9f4aS4rOK5xoO/SU5HZKSXtCsDe0Pj7uSc5Ug008qTI+a9M1tBeKoTs7tHzhJNSKgk7pm5e8d3oGWXX5shyOG3cKSqgfwuNDnmmPDNDivwmi9kmKqWIC9OQRf8InpYXH7NdUYNwN+jljffvNTewdZz42VPrvqoMH7hSxiG7A1h8leOv4F3Ek/oeJX6U8nnL9nJ5pHLVuPWD0aNnTPTJD8Y4oQTp5zLhDIIfaJCaGcQperULVF7K6yX8MhHxIBwek418rKIp11om0SWBXOYSGOM0rNNN59qNiKwLNK+MPUf7ObcRBN5I5vg8jB7IMoz66jrNmT2uiWCyI8MmYDZgAACPoaZ9REyqke+AE1/x1ZX0w7OamUexKF8YGZiw+cDpT/BP1GsONnwI4a8M7HsBtDgZPRd6/Hfqlq3HE2xLuhYX8bAc1MUr0gP9KuH6HDQNlIV4KaRZWxyRo1wmKHOF5G5wTHrtxg8tnXylMc1PKOtaXIU4JJZ1l4x/7FwhPmg9M86PBPWr5zwUj2CVXC7wWlL/6M89Mlh8yXESMO3AIuAmEMKjqauPrgi9hAdI2oqnLZWCRL9gcHBida1y0DTXQhcwMv1ORrk65VFHtVgYAegrxu3NDoJiDyVaPZxDwTYRGjPII3va8GALAMVy5xou2ikzRvJjW7Gm3XoaqJCTCExN4m5i/Dqc81Gr4uT7OaeypYTUjnwCh7aMhsOTDJehefzjXhlkn//2eik+NivKx/BTJBEdT6MR97Wh/ns/VcK7QTmbjwbU2cwLngT7Ylq+uzhx54R9JMaSLhnw+/nIrcVkG77Hi3neShKeZmnl5DC9PuwIbtNvVge3Q+V0ws2zsL3z7ndz4tTMYFdvR/XbrnbEErTDLWrV6Lc3JHQMs0bYUyTBg5dThwCiuZ1evaT6BlMMLuSCVxdBGzXTBcvGwihFzZbyNoX+52DS5x+RbIEvd6KWOpQ6Ni+1GAawHDdNUiQTQFXRxLSHfc9fh7hE4qcD7PqHGsykYj7A0XqHCjbKKgWSkcAg==

尽管这看起来像 Base64 编码的数据,甚至jwt在文档中的代码段上方都有说明,但这显然不是普通的 JWT。老实说,我不太确定它是什么,但是,我认为它是 JWS 或用 nonce 编码的 JWT。

我在想我可能应该将此令牌视为不透明的,但是,因为登录(和登录链接生成)隐藏在机器人框架后面,我看不到另一个向已部署的应用程序添加权限的机会, ia 验证访问令牌是否提供所需的权限。由于我的应用程序还会在以后代表用户执行操作,因此在我收到来自 Graph API 的 403er 响应后提示登录也是不可行的。

  1. 有没有办法解码这些类型的令牌,或者确保我的应用程序只接收可解码的 JWT?
  2. 如果没有,是否有验证访问令牌权限(范围)的替代方法?

标签: microsoft-graph-apibotframeworkmicrosoft-teamsazure-bot-servicemicrosoft-graph-teams

解决方案


推荐阅读