Чат службы связи — не работает токен обновления

#azure #chat #refresh-token #azure-communication-services

#azure #Чат #обновить-токен #azure-communication-services

Вопрос:

Я загрузил службу чата Azure communication и заставил ее работать, как показано на видео https://www.youtube.com/watch?v=2pyKhoIZhJo .

но это проблема.. как я справляюсь с истечением срока действия токена.. у него продолжает истекать идентификатор, и я не могу общаться дальше..

Я уже упоминал refreshToken, хотя он не обновляется. ниже приведен код, в который я внес изменения,

  var userCredential = new CommunicationUserCredential
               (
                   initialToken: moderator.token,
                   refreshProactively: true,
                    tokenRefresher: cancellationToken => fetchNewTokenForCurrentUser(moderator.identity).GetAwaiter().GetResult(),
                    asyncTokenRefresher: cancellationToken => fetchNewTokenForCurrentUserasync(moderator.identity)
               );
  

метод fetchNewTokenForCurrentUser, как показано ниже

    private async Task<string> fetchNewTokenForCurrentUser( string identity)
        {
              CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClient(resourceConnectionString);
                CommunicationUser user = new CommunicationUser(identity);
                Azure.Response<CommunicationUserToken> tokenResponse = await communicationIdentityClient.IssueTokenAsync
                                                                                (
                                                                                    user,
                                                                                    scopes: new[] { CommunicationTokenScope.Chat }

                                                                                );
                string token = tokenResponse.Value.Token;
            
                return token;
        }
  

Но этот код не работает..
надеюсь, кто-нибудь мне поможет.. заранее спасибо

Ответ №1:


Мы рассматриваем эту проблему, о которой вы сообщили, и потребуется дополнительная информация. Сгенерированные токены должны храниться в течение 24 часов.

  • Эта проблема возникает в вашем локальном окне или когда демонстрационная версия развертывается в Azure как веб-приложение?
  • Когда вы упоминаете, что «у него истекает идентификатор протектора», какую именно ошибку вы видите?
  • Есть ли у вас какие-либо следы ошибок, которые мы можем просмотреть?
  • Не могли бы вы захватить сеанс скрипача (если проблема воспроизводима локально?)

Первое, что мы можем попробовать, это следующее изменение в вашем коде:

 const string initialToken = "your-initial-token";
Uri apiUrl = new Uri("https://yourendpoint.dev.communication.azure.net");
const string identity = "your user id"; //i.e. 8:acs:1b5cc06b-f352-4571-b1e6-d9b259b7c776_00000006-6224-f48d-b274-5aaaaaaaaaaa";

var communicationUserCredential = new CommunicationUserCredential(
    initialToken: initialToken,
    refreshProactively: true,
    tokenRefresher: cancellationToken => fetchNewTokenForCurrentUser(identity).GetAwaiter().GetResult(),
    asyncTokenRefresher: cancellationToken => fetchNewTokenForCurrentUser(identity));

var chatClient = new ChatClient(apiUrl, communicationUserCredential);


//For the refresher logic. Note ValueTask vs Task
private async ValueTask<string> fetchNewTokenForCurrentUser(string identity)
{
    const string connectionString = "your connection string";
    CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClient(connectionString);
    CommunicationUser user = new CommunicationUser(identity);
    Azure.Response<CommunicationUserToken> tokenResponse = await communicationIdentityClient.IssueTokenAsync
    (
        user,
        scopes: new[] { CommunicationTokenScope.Chat }

    );
    string token = tokenResponse.Value.Token;
    return token;
}
  

Мы свяжемся с вами, как только у вас появится возможность предоставить вышеуказанные сведения.
Приветствия

Ответ №2:

Я думаю, вам нужно не только обновить токен модератора, но и обновить токены участников потока.

Например, у вас есть поток с A, B, C и модератором (это создается в коде C #). Через 24 часа срок действия токенов для всех пользователей истекает. Если вы все еще хотите просматривать сообщения журнала и отправлять сообщения, вам необходимо обновить токен A. Та же логика применяется для других пользователей.

Надеюсь, это ответит на ваш вопрос.

Я видел, что обновление токена pr также находится на рассмотрении: https://github.com/Azure-Samples/communication-services-web-chat-hero/pull/3