Я уже некоторое время бьюсь головой о стену. Настольное приложение WPF вызывает ASP. NET веб-API. Я использую аннотацию [AUTHORIZE]
в приложении ASP. NET. Вот тут и начались проблемы. Использование MSAL из приложения WPF.
static App()
{
_clientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
.WithDefaultRedirectUri()
.Build();
}
ClientId относится к регистрации приложения для настольного приложения в Azure.
string[] scopes = new string[] { "api://****-f56f-4cec-a771-dbdb5d43f047/access_as_user" };
var accounts = await App.PublicClientApp.GetAccountsAsync();
AuthenticationResult authResult;
try
{
authResult = await App.PublicClientApp
.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.ExecuteAsync();
}
catch (Exception)
{
authResult = await App.PublicClientApp
.AcquireTokenInteractive(scopes)
.ExecuteAsync();
}
Также существует регистрация приложения для веб-API. Я настроил область действия с помощью 'Expose an API' и дал делегированное разрешение настольному приложению для вызова веб-API.
Когда я звоню, я получаю
StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers
Я могу вызовите конечную точку без АВТОРИЗАЦИИ без проблем, поэтому API работает нормально. Я бесконечно просматривал документацию MSAL.
Вещи, в которых я не уверен. AppRoles в манифесте. Требуется ли им авторизация где-либо, кроме добавления в манифест? Могу ли я покинуть службу приложений (веб-api), поскольку в приложении службы приложений включен анонимный доступ. У пользователей не будет запроса на вход ». Об этом позаботится MSAL. Я предполагаю, что вы можете использовать код MSAL или защитить api через AD (аутентификация / авторизация)
Я закопался в яме и сейчас вижу, так что извините меня немного. Спасибо