MSAL не перенаправляет в приложение Android

Я играю с предварительным просмотром версии 1.1.2 MSAL (Microsoft Identity Client) и застрял во время процесса входа, когда он не перенаправляет мое приложение обратно в приложение Android.

Мое приложение Xamarin - это приложение для Android, созданное с помощью Prism, и я считаю, что у меня все отсортировано.

В файле App.xaml.cs имейте:

public static UIParent UiParent { get; set; }

public static PublicClientApplication ClientApplication { get; set; }

public static string[] Scopes = { "User.Read" };

Затем в конструкторе приложения у меня есть:

public App(IPlatformInitializer initializer) : base(initializer)
{
    ClientApplication = new PublicClientApplication("my-app-id");
}

Учтите, что это приложение, созданное с помощью Prism.

Затем в моем файле MainPageViewModel.cs у меня есть команда, запускающая нажатие кнопки, со следующим кодом:

private async void OnAuthenticate()
{
    try
    {
        var result = await App.ClientApplication.AcquireTokenAsync(App.Scopes, App.UiParent);
        Message = $"Welcome {result.User.Name}";
    }
    catch (MsalException ex)
    {
        Message = ex.Message;
    }
}

Чтобы правильно проанализировать UIParent, я обновил файл MainActivity.cs в проекте Droid, чтобы:

protected override void OnCreate(Bundle bundle)
{
    // omitted...
    LoadApplication(new App(new AndroidInitializer()));
    App.UiParent = new UIParent(this);
}

а также:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);

    AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
}

Если я отменяю процесс входа, я получаю сообщение «Пользователь отменил аутентификацию», что правильно, но процесс входа никогда не перенаправляет меня обратно в приложение Android.

URI перенаправления в моем приложении следующий:

msal{my-app-id}://auth

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

Не знаю, почему у меня не работает?

Хороший вопрос, я тоже пытаюсь найти ответ на него ... Если я найду что-нибудь плохое, дайте вам знать

Egli Becerra 04.04.2018 01:58

Вам необходимо обновить манифест Android, чтобы «получить» обратный вызов на указанный uri перенаправления. У меня MSAL работал только со стандартной учетной записью Windows, я не мог заставить его работать с VSTS, потому что приложения VSTS требуют физического uri, и, похоже, MSAL не может с этим справиться.

JadedEric 04.04.2018 05:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
1 321
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Как уже упоминал JadedEric, речь идет об обновлении файла AndroidManifest.xml для Android, а для IOS - об обновлении файла info.plist. пожалуйста, посмотрите следующий пост, поскольку они объясняют, что именно помещать в эти файлы: https://github.com/Azure-Samples/active-directory-xamarin-native-v2

Еще одна важная вещь здесь заключается в том, что вы должны убедиться, что ваше приложение, зарегистрированное в azure, имеет тот же RedirectURI, что и тот, который помещен в manfiest.xml и info.plist. это ключ к работе этого перенаправления (это msal{my-app-id}://auth, о котором вы упомянули выше)

Предлагаю, чтобы вы не обновили файл AndroidManifest.xml с помощью URL-адреса возврата "мсал {clientID}".

например.:

<data android:scheme = "msalxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" android:host = "auth" />
Ответ принят как подходящий

Недавно я столкнулся с той же проблемой с решением образец, предоставленным на github.

Первоначальный ответ выше - один из вариантов, но этот ссылка на сайт от Microsoft лучше объясняет его с помощью примера кода. Вы можете обновить манифест Android:

<activity android:name = "microsoft.identity.client.BrowserTabActivity">
    <intent-filter>
        <action android:name = "android.intent.action.VIEW" />
        <category android:name = "android.intent.category.DEFAULT" />
        <category android:name = "android.intent.category.BROWSABLE" />
        <data android:scheme = "msal{client_id}" android:host = "auth" />
         </intent-filter>
</activity>

или создайте действие в коде:

  [Activity]
  [IntentFilter(new[] { Intent.ActionView },
        Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
        DataHost = "auth",
        DataScheme = "msal{client_id}")]
  public class MsalActivity : BrowserTabActivity
  {
  }

В любом случае, как только идентификатор клиента установлен правильно, он должен перенаправить обратно в ваше приложение.

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

Calos 16.01.2020 04:59

Другие вопросы по теме