Я пытаюсь создать консольное приложение .NET для аутентификации пользователей для приложения-функции Azure. Я хочу аутентифицировать пользователей, используя их учетные данные AD, а затем на их основе создать токен. Я считаю, что для этого мне нужно включить «Общедоступные клиентские потоки». Я новичок в этом, но после многих неудачных попыток мне удалось заставить его работать после установки URI идентификатора приложения и области действия в разделе «Открыть API». Я считаю, что в манифесте это свойство называется «identifierUris». Согласно некоторым выводам, и общий доступ, и идентификаторUris не могут использоваться одновременно. Есть ли альтернативный способ добиться этого? Также будут оценены любые объяснения или рассуждения относительно того, почему это не идеально.
Это код, который мы используем для получения токена и его использования:
var publicClient = PublicClientApplicationBuilder
.Create(clientId)
.WithAuthority(authorityUri)
.WithRedirectUri(redirectUri)
.Build();
var accessTokenRequest = publicClient.AcquireTokenInteractive(scopes);
var accessToken = await accessTokenRequest.ExecuteAsync();
restRequest.AddHeader("authorization", "Bearer " + token);
Это код Pulumi, создающий приложение Azure AD, где functionApp
- это Pulumi.Azure.AppService.FunctionApp
, против которого мы пытаемся авторизоваться:
var azureApp = new AzureAD.Application(name, new AzureAD.ApplicationArgs
{
DisplayName = name,
AvailableToOtherTenants = false,
Homepage = "https://VisualStudio/SPN",
Oauth2AllowImplicitFlow = true,
ReplyUrls = { "http://localhost" },
IdentifierUris =
{
functionApp.DefaultHostname.Apply(dnsName => "https://" + dnsName)
},
PublicClient = true
}, new CustomResourceOptions {DependsOn = functionApp});
Когда для PublicClient
установлено значение false, развертывание выполняется нормально. Если для него установлено значение true
, соответствующий вызов API возвращает ошибку 400 с таким текстом:
Property identifierUris is invalid
Поэтому мы устанавливаем для PublicClient
значение false, а затем вручную обновляем его на true на портале, что отлично работает:
Что нам не хватает?