代码之家  ›  专栏  ›  技术社区  ›  JadedEric

MSAL未重定向到Android应用程序

  •  3
  • JadedEric  · 技术社区  · 8 年前

    我正在玩MSAL(Microsoft Identity Client)预览版1.1.2,在登录过程中遇到了问题,它不会将我的应用程序重定向回Android应用程序。

    我的Xamarin应用程序是一个Prism生成的Android应用程序,我相信我已经把一切都整理好了。

    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。Droid项目中的cs文件,收件人:

    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上读到的大多数博客,这是应该的。

    不知道为什么对我不起作用?

    3 回复  |  直到 8 年前
        1
  •  2
  •   Cam    6 年前

    我最近在 sample github上提供的解决方案。

    以上最初的答案是一种选择,但 link 来自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
      {
      }
    

    无论哪种方式,一旦客户端ID设置正确,它应该重定向回您的应用程序。

        2
  •  0
  •   Egli Becerra    8 年前

    正如JadedEric提到的,更新 AndroidManifest。xml android和IOS文件更新 信息。普利斯特 文件请看下面的帖子,因为他们确切地解释了在这些文件中放置什么: https://github.com/Azure-Samples/active-directory-xamarin-native-v2

    这里还有一件重要的事情,那就是你必须确保你在azure中注册的应用程序具有与在manfiest中注册的应用程序相同的重定向URI。xml和信息。普利斯特。这是使重定向正常工作的关键(这是 msal{my-app-id}://auth 您在上面提到过)

        3
  •  0
  •   סטנלי גרונן Abhishek Singh    7 年前

    建议您尚未更新 AndroidManifest。xml 返回身份验证url的文件“ msal{客户端ID} “。

    e、 g.:

    &lt;data android:scheme="msalxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" android:host="auth" /&gt;