Разрешить несколько идентификаторов приложений Microsoft для чат-бота - PullRequest
1 голос
/ 24 февраля 2020

У меня есть чат-бот, работающий на localhost, и он отлично работает. Затем я добавил новую регистрацию Bot Channels на Azure для тестирования, и это тоже отлично работает. Я сделал это, взяв его Microsoft App ID и пароль и поместив его в файл appsettings. json.

Однако мне нужно добавить еще одну регистрацию Bot Channels. Когда я проверяю его на этой регистрации, мой бот возвращает 401 несанкционированную ошибку. Это потому, что у него есть новый идентификатор приложения и пароль. Но я уже положил идентификатор приложения и пароль с моего первого канала регистрации. Мне нужно, чтобы они оба работали.

Как разрешить моему чат-боту принимать несколько идентификаторов приложений и паролей? Или как мне полностью избавиться от этого уровня безопасности (ie. Разрешить ВСЕ идентификаторы приложений и пароли)?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

С помощью пользовательского ICredentialProvider приложение и пароль могут быть получены из любого места:

public class MultiCredentialProvider : ICredentialProvider
{
    public Dictionary<string, string> Credentials = new Dictionary<string, string>
    {
        { "YOUR_MSAPP_ID_1", "YOUR_MSAPP_PASSWORD_1" },
        { "YOUR_MSAPP_ID_2", "YOUR_MSAPP_PASSWORD_2" }
    };

    public Task<bool> IsValidAppIdAsync(string appId)
    {
        return Task.FromResult(this.Credentials.ContainsKey(appId));
    }

    public Task<string> GetAppPasswordAsync(string appId)
    {
        return Task.FromResult(this.Credentials.ContainsKey(appId) ? this.Credentials[appId] : null);
    }

    public Task<bool> IsAuthenticationDisabledAsync()
    {
        return Task.FromResult(!this.Credentials.Any());
    }
}

Затем в Startup.cs:

services.AddSingleton<ICredentialProvider, MultiCredentialProvider>();
0 голосов
/ 25 февраля 2020

Ответ, как предложил @Mick, заключается в создании бота-адаптера для каждого канала. Вы можете сделать что-то подобное, если хотите, чтобы это действительно динамично c:

BotController.cs

[HttpPost, HttpGet]
public async Task PostAsync()
{
    var credentialProvider = new SimpleCredentialProvider(YourAppId, YourAppPassword); // for each adapter
    Adapter = new BotFrameworkHttpAdapter(credentialProvider); // for each adapter
    await Adapter.ProcessAsync(Request, Response, Bot);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...