使用 OAuthPrompt 获取 Microsoft Graph API 的刷新令牌
Get refresh tokens of Microsoft Graph API with OAuthPrompt
我正在创建一个 MS Teams 机器人,它通过用户通过 OAuthPrompt
登录后生成的后台线程定期检查用户的 Outlook 日历。
要实现该功能,我似乎必须配置一个 OAuth 连接设置和一个支持 offline_access
的应用程序注册。然后,根据Get access on behalf of a user.
,在获取access token的时候获取refresh token
但只要我尝试 the example bot,OAuthPrompt
的结果就不会包含刷新令牌。而且我找不到记录的方法来获取它。
我怎样才能达到目标?我需要对 OAuthPrompt
或一些相关的 类 进行一些破解吗?我必须从头开始制作卡片吗?
您使用的示例适用于大多数频道,但 Teams 的行为有所不同。 Invoke Activity 被发送到 bot,而不是其他渠道 使用的事件 Activity。如果正在使用 OAuthPrompt,则必须将此调用 Activity 转发到对话框。
- 参考this documentation for adding authentication to your MS Teams bot, which makes use of Teams-auth样本。
- 为了更好地了解 OAuth 在 MS Teams 中的工作原理,您可以参考 this 说明身份验证流程的文档。
希望对您有所帮助!!
我得出结论,我们不能通过调查得到 refresh_token
和 OAuthPrompt
。所以我想出了一个不同的方法来实现这个目标。
关键思想是为“使用 Microsoft 帐户登录”功能创建一个微型 Web 应用程序,它可以像普通 Web 应用程序一样轻松获得 refresh_token
。
这是示例应用程序:https://github.com/igrep/example-teams-bot-with-ms-account-refresh-token
alwaysPrompt 标志应为 false。然后 OAuth 提示将在不提示登录卡的情况下静默获取刷新令牌。
关于这个问题请参考github上的回答。
在写 时,另一个想法闪过我的脑海:运行 一个对话框,其中包含 TurnContext
中的 OAuthPrompt
,其中 ConversationRefrence
被保存并传递给后台线程,可能会工作。 (但我没有时间也没有动力去尝试!)
就我而言,我需要 refresh_token 来获取其他 Microsoft 资源(如 Exchange)的访问令牌,
解决方案是使用
const tokenResponses = await context.adapter.getAadTokens(context, this.connectionName, [
"https://outlook.office365.com",
"https://graph.microsoft.com",
]);
我正在创建一个 MS Teams 机器人,它通过用户通过 OAuthPrompt
登录后生成的后台线程定期检查用户的 Outlook 日历。
要实现该功能,我似乎必须配置一个 OAuth 连接设置和一个支持 offline_access
的应用程序注册。然后,根据Get access on behalf of a user.
但只要我尝试 the example bot,OAuthPrompt
的结果就不会包含刷新令牌。而且我找不到记录的方法来获取它。
我怎样才能达到目标?我需要对 OAuthPrompt
或一些相关的 类 进行一些破解吗?我必须从头开始制作卡片吗?
您使用的示例适用于大多数频道,但 Teams 的行为有所不同。 Invoke Activity 被发送到 bot,而不是其他渠道 使用的事件 Activity。如果正在使用 OAuthPrompt,则必须将此调用 Activity 转发到对话框。
- 参考this documentation for adding authentication to your MS Teams bot, which makes use of Teams-auth样本。
- 为了更好地了解 OAuth 在 MS Teams 中的工作原理,您可以参考 this 说明身份验证流程的文档。
希望对您有所帮助!!
我得出结论,我们不能通过调查得到 refresh_token
和 OAuthPrompt
。所以我想出了一个不同的方法来实现这个目标。
关键思想是为“使用 Microsoft 帐户登录”功能创建一个微型 Web 应用程序,它可以像普通 Web 应用程序一样轻松获得 refresh_token
。
这是示例应用程序:https://github.com/igrep/example-teams-bot-with-ms-account-refresh-token
alwaysPrompt 标志应为 false。然后 OAuth 提示将在不提示登录卡的情况下静默获取刷新令牌。 关于这个问题请参考github上的回答。
在写 TurnContext
中的 OAuthPrompt
,其中 ConversationRefrence
被保存并传递给后台线程,可能会工作。 (但我没有时间也没有动力去尝试!)
就我而言,我需要 refresh_token 来获取其他 Microsoft 资源(如 Exchange)的访问令牌, 解决方案是使用
const tokenResponses = await context.adapter.getAadTokens(context, this.connectionName, [
"https://outlook.office365.com",
"https://graph.microsoft.com",
]);