#wpf #azure #authentication #azure-ad-b2c #azure-app-service-envrmnt
#wpf #лазурный #аутентификация #azure-ad-b2c #azure-приложение-сервис-среда
Вопрос:
На данный момент я совершенно застрял, пытаясь внедрить аутентификацию в проект, над которым я работаю. Конечная цель этого проекта — иметь два приложения 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. Привет, Джошуа. Как вы настроили Azure AD для мобильных приложений Azure? например, идентификатор клиента, URL-адрес отправителя и разрешенные аудитории токенов?
2. Да, у меня есть! В службе приложений я настроил его для аутентификации с помощью AD. Вот как я это настроил — Служба приложений: Идентификатор клиента: идентификатор приложения URL-адреса эмитента приложения B2C: login.microsoft.com {Имя тенната}.onmicrosoft.com/v2.0/.well-known/openid-configuration На стороне B2C: Веб-и собственный клиент с поддержкой веб-ответа URL: https: //{AppServiceName}.azurewebsites.net/.auth/login/add/callback Родное приложение: я не знал, что такое пользовательский редиректПоэтому у меня есть оба {TennatName}.onmicrosoft.com://auth/ и {AppServiceName} .azurewebsites.net/.auth/login/add/callback
3. Вау, этот комментарий не был отформатирован так, как я его вставил.
4. Итак, если я могу предположить, что
Authority
в клиентском приложении установлено значение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
Е..5. @JoshuaStevens Вы должны использовать https://{your-tenant-name}.b2clogin.com/tfp /{ваше-имя-арендатора}.onmicrosoft.com /{your-policy-name} в качестве органа власти.
Ответ №1:
Если для полномочий клиента установлено значение 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
.