В авторизации для этого запроса отказано - Desktop для ASP. NET Web API - PullRequest
1 голос
/ 26 мая 2020

Я уже некоторое время бьюсь головой о стену. Настольное приложение 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 (аутентификация / авторизация)

Я закопался в яме и сейчас вижу, так что извините меня немного. Спасибо

1 Ответ

1 голос
/ 26 мая 2020

пожалуйста, посмотрите: https://docs.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad# -configure-with-advanced-settings

вверху этого документа есть примечание:

Note
The express settings flow sets up an AAD V1 application registration. If you wish to use Azure Active Directory v2.0 (including MSAL), please follow the advanced configuration instructions.

в основном означает, что вы не можете использовать msal с настройкой express. но может с продвинутым.

, то в разделе под ним описывается, что вам нужно сделать для настольного приложения с точки зрения добавления разрешений api к вашей службе приложений.

Надеюсь, это немного направит вас на правильный путь, если нет, прокомментируйте, и я постараюсь помочь в максимально возможной степени.

...