#azure #asp.net-core #azure-active-directory #botframework #pulumi
#azure #asp.net-core #azure-active-directory #botframework #пулуми
Вопрос:
Я получаю несанкционированную ошибку при попытке отправить сообщение с канала бота Azure в api. Я развернул приложение Azure и канал бота с помощью pulumi. В приложении Azure я заметил, что в разделе аутентификации есть предупреждение о неявном предоставлении.
Если я отключу настройку неявного предоставления на портале Azure, канал бота будет работать нормально. Я создаю приложение Azure с настройками по умолчанию в соответствии с документацией pulumi, но нет возможности удалить эти неявные настройки предоставления
Я создал приложение Azure и канал бота с помощью pulumi, используя эту ссылку
public static AzureAD.Application Create()
{
var name = "app-name";
var azureApp = new AzureAD.Application(name, new AzureAD.ApplicationArgs
{
Name = name
// Tried combinations of the following lines, but it makes no difference
//, Type = "native"
//, Oauth2AllowImplicitFlow = false
});
CreatePrincipal(azureApp);
return azureApp;
}
private static void CreatePrincipal(AzureAD.Application azureApp)
{
var name = "app-principal";
new AzureAD.ServicePrincipal(name, new AzureAD.ServicePrincipalArgs
{
ApplicationId = azureApp.ApplicationId
});
}
public static ChannelsRegistration Create(ResourceGroup resourceGroup, AzureAD.Application teamsBotAzureApp)
{
var channelName = "Channel";
var channel = new ChannelsRegistration(channelName, new ChannelsRegistrationArgs
{
Location = "global",
ResourceGroupName = resourceGroup.Name,
Sku = "F0",
MicrosoftAppId = teamsBotAzureApp.ApplicationId,
Endpoint = "https://azurefunction.com/api/BotMessagesHandler"
});
CreateChannel(resourceGroup, channel);
return channel;
}
Комментарии:
1. Когда канал вызывает вашего бота, он отправляет заголовок аутентификации с токеном предъявителя. Процесс проверки и проверки этого токена объясняется здесь: learn.microsoft.com/azure/bot-service/rest-api /…
2. Я мало знаю о неявном предоставлении, но при беглом чтении не похоже, что это сработает для бота. Я понимаю, что неявный поток предоставления — это обмен между получателем и вызывающим абонентом. Службы канала, вызывающие вашего бота, не настроены для этого типа обмена, они настроены на отправку и получение токенов на предъявителя JWT, как описано выше. Что-то, что вы могли бы сделать, это отделить интерфейс от серверной части бота и опубликовать их отдельно.
3. Все это говорит о том, что если вы ориентируетесь только на прямой канал, расширение службы приложений может разрешить неявный поток предоставления, поскольку оно является расширением службы приложений и выполняется в контексте вашего приложения, которое может быть даже изолировано в виртуальной сети. Дополнительную информацию можно найти здесь: learn.microsoft.com/azure/bot-service /…
4. Вы отключили неявное предоставление от портала Azure, тогда канал бота работает нормально, так в чем ваш вопрос?
5. @JoyWang, поскольку я делаю это с помощью pulumi, я не хочу делать это вручную
Ответ №1:
В azure ad настройка Implicit Grant
контролируется параметрами в Manifest
(вы также можете установить их в пользовательском интерфейсе, тогда они будут изменены в манифесте), Access tokens
соответствует oauth2AllowImplicitFlow
, ID tokens
соответствует oauth2AllowIdTokenImplicitFlow
.
Если вы создаете приложение с помощью pulumi, вы можете настроить Oauth2AllowImplicitFlow = false
отключение Access tokens
, но, похоже oauth2AllowIdTokenImplicitFlow
, во входных данных pulumi нет, поэтому вы не смогли отключить ID tokens
через pulumi.
Вы можете попробовать обходные пути, приведенные ниже.
1. В предупреждении говорится You should remove these settings or register the appropriate redirect URI.
, что вы можете попытаться создать приложение с URI перенаправления (т.Е. ReplyUrls ) с кодом, как показано ниже, посмотреть, работает ли оно без отключения ID tokens
.
ReplyUrls =
{
"https://replyurl",
}
2. Если оно принято, вы можете использовать Microsoft Graph SDK для обновления приложения после его создания. Установите значение enableIdTokenIssuance
false
в implicitGrantSettings
web
свойстве of, тогда ID tokens
оно будет отключено.