В настоящий момент я застрял, пытаясь внедрить аутентификацию в проект, над которым работаю.Конечной целью этого проекта является создание двух приложений 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" };