Токен аутентификации AD не становится одинаковым для каждого пользователя в веб-чате V4. - PullRequest
0 голосов
/ 03 апреля 2019

Я использую Bot Framework V4, аутентификация AD для нашего бота работает нормально. Но когда я пытаюсь использовать новый сеанс, он использует тот же токен, с помощью которого он был зарегистрирован ранее.Так что я получаю одни и те же данные во всех сессиях.Я использую AuthenticationDialog, предоставленный Enterprise Bot Template

Фактически: я вошел в систему один раз, и он остается во всех сеансах (даже на других машинах) Ожидаемый: я ожидаю, что каждый сеанс должен приводить меня к входу в системукарточка (OAurth карточка)

public class AuthenticationDialog : ComponentDialog
{
    private static AuthenticationResponses _responder = new AuthenticationResponses();

    public AuthenticationDialog(string connectionName)
        : base(nameof(AuthenticationDialog))
    {
        InitialDialogId = nameof(AuthenticationDialog);
        ConnectionName = connectionName;

        var authenticate = new WaterfallStep[]
        {
            PromptToLogin,
            FinishLoginDialog,
        };

        AddDialog(new WaterfallDialog(InitialDialogId, authenticate));
        AddDialog(new OAuthPrompt(DialogIds.LoginPrompt, new OAuthPromptSettings()
        {
            ConnectionName = ConnectionName,
            Title = AuthenticationStrings.TITLE,
            Text = AuthenticationStrings.PROMPT,
        }));
    }

    private string ConnectionName { get; set; }

    private async Task<DialogTurnResult> PromptToLogin(WaterfallStepContext sc, CancellationToken cancellationToken)
    {
        return await sc.PromptAsync(AuthenticationResponses.ResponseIds.LoginPrompt, new PromptOptions());
    }

    private async Task<DialogTurnResult> FinishLoginDialog(WaterfallStepContext sc, CancellationToken cancellationToken)
    {
        var activity = sc.Context.Activity;
        if (sc.Result != null)
        {
            var tokenResponse = sc.Result as TokenResponse;

            if (tokenResponse?.Token != null)
            {
                var user = await GetProfile(sc.Context, tokenResponse);
                await _responder.ReplyWith(sc.Context, AuthenticationResponses.ResponseIds.SucceededMessage, new { name = user.DisplayName });
                return await sc.EndDialogAsync(tokenResponse);
            }
        }
        else
        {
            await _responder.ReplyWith(sc.Context, AuthenticationResponses.ResponseIds.FailedMessage);
        }

        return await sc.EndDialogAsync();
    }

    private async Task<User> GetProfile(ITurnContext context, TokenResponse tokenResponse)
    {
        var token = tokenResponse;
        var client = new GraphClient(token.Token);

        return await client.GetMe();
    }

    private class DialogIds
    {
        public const string LoginPrompt = "loginPrompt";
    }
}

1 Ответ

0 голосов
/ 06 апреля 2019

Это известная проблема в WebChat. Когда вы используете один и тот же идентификатор пользователя для каждого диалога, он будет ссылаться на одни и те же хранилища данных. Чтобы решить эту проблему, я бы рекомендовал генерировать случайные идентификаторы пользователей для каждого разговора.

Надеюсь, это поможет.

...