如何正确注销 Teams BotFramework OauthPrompt?

How to properly logout from Teams BotFramework OauthPrompt?

我有一个使用多个通用 Oauth2 提供程序的 c# Teams 机器人。 作为示例,我使用了此示例 https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/csharp_dotnetcore/46.teams-auth

我还向 Azure 中的机器人注册添加了通用 OAuth2。使用单个 Oauth 提供程序一切正常。

注销过程后的用户必须能够向另一个 oauth2 提供程序进行身份验证。 但是我遇到了 OauthPrompt 缓存以前的凭据的问题,我不知道如何清除此缓存并正确注销用户

我已经尝试过不同的方法来注销用户:

var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, connectionName,
                            innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false)

var oauth = (OAuthPrompt)Dialogs.Find(nameof(OAuthPrompt));
if (oauth != null)
{
    await oauth.SignOutUserAsync(innerDc.Context, cancellationToken: cancellationToken);
}

--使用BotFrameworkAdapter

await botAdapter.SignOutUserAsync(innerDc.Context, connectionName, cancellationToken: cancellationToken);

请帮忙

发现问题。 Bot 在服务中注册为单例 (services.AddSingleton <..>),并且在瀑布步骤中添加了 OauthPrompt 对话框,但未处理。 我为每个通用 OAuth 创建了不同的 OauthPrompts,并通过对话框构造函数添加到对话框中。并根据用户提示选择正确的 OauthPrompt

            AddDialog(new OAuthPrompt("1",
                new OAuthPromptSettings
                {
                    ConnectionName = "1",
                    Text = "Please Sign In",
                    Title = "Sign In",
                    Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
                }));
            AddDialog(new OAuthPrompt("2",
                new OAuthPromptSettings
                {
                    ConnectionName = "2",
                    Text = "Please Sign In",
                    Title = "Sign In",
                    Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
                }));