Как аутентифицировать приложение WPF с помощью AAD B2C, чтобы получить доступ к службе приложений Azure - PullRequest
0 голосов
/ 18 апреля 2019

В настоящий момент я застрял, пытаясь внедрить аутентификацию в проект, над которым работаю.Конечной целью этого проекта является создание двух приложений WPF и веб-приложения, размещенного в Azure.Одно приложение WPF предназначено для администратора, другое для персонала и, наконец, веб-приложение для клиентов.Каждое приложение будет подключено к одной службе приложений Azure для общей базы данных и должно иметь аутентификацию, поэтому необходимо разделить всех пользователей.Для проверки подлинности я планирую использовать Azure Active Directory B2C.

Я уже несколько дней исследую и пытаюсь реализовать это в одном из приложений WPF, но, как я уже говорил, я застрял.Из того, что я понимаю, единственный способ сделать аутентификацию B2C для WPF - через управляемую клиентом аутентификацию.Следуя коду, показанному на сайтах учебных пособий по Azure, другим публикациям SO и репозиториям Azure Git, я разработал следующий код:

   System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
   authResult = await App.PublicClientApp.AcquireTokenAsync(App.ApiScopes,
       GetUserByPolicy(accounts, App.PolicySignUpSignIn), UIBehavior.SelectAccount, 
       string.Empty, null, App.Authority);
   Newtonsoft.Json.Linq.JObject payload = new Newtonsoft.Json.Linq.JObject();
   payload["access_token"] = authResult.AccessToken;
   MobileServiceClient msclient = new MobileServiceClient(App.AzureAppService);
   MobileServiceUser user = await msclient.LoginAsync(
        MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);

Все начинается отлично, и я могу получитьПолитика входа в систему для отображения.После входа в систему мне дают IdToken и AccessToken.После создания JObject и добавления к нему токена доступа я пытаюсь использовать его для входа в систему с помощью MobileServiceClient.Но вот где у меня проблемы.Независимо от того, что я делаю, что бы я ни пытался, я получаю исключение только с ошибкой 401, сообщающей, что я не авторизован.И это точка, в которой я застрял последние несколько дней.

Очевидно, я не делаю здесь ничего особенного, и я думаю, что многие люди делали это до меня, но я просто не могупройти этот пункт и надеялся, что кто-то сможет предложить мне какое-то руководство.Я не в курсе?Есть ли лучший способ, которым я мог бы сделать это?Буду очень признателен за любые предложения или советы, так как я новичок в Azure.

Спасибо всем!

Обновление:

Вот как у меняНастройки Azure:

На стороне службы приложения

Client Id: "{Client Id of the AAD B2C App}"
Issuer URL: "login.microsoft.com{TennatName}.onmicrosoft.com/v2.0/.well-known/openid-configuration"
Allowed Token Audiences: "https://{App Service Name}.azurewebsites.net" (App Service URL)

На стороне B2C:

Web and native client enabled
Web Reply URL: "https://{AppServiceName}.azurewebsites.net/.auth/login/add/callback"
Native App: I did not know what custom redirect URL to have so I have both
"{TennatName}.onmicrosoft.com://auth/" and 
"{AppServiceName}.azurewebsites.net/.auth/login/add/callback"

Обновление 2:

My authority is login.microsoftonline.com/tfp{tenant}/{policy}/oauth2/v2.0/authorize
And my ApiScopes = { "https://{Tenant}/thisisatest/user_impersonation" };

1 Ответ

1 голос
/ 23 апреля 2019

Если полномочия для клиента установлены на https://{your-tenant-name}.b2clogin.com/tfp/{your-tenant-name}.onmicrosoft.com/{your-policy-name}/, то URL-адрес издателя в службе приложения должен ссылаться на метаданные для этого полномочия; т.е. https://{your-tenant-name}.b2clogin.com/tfp/{your-tenant-name}.onmicrosoft.com/{your-policy-name}/v2.0/.well-known/openid-configuration.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...