如何使用Azure ADB2C实施移动应用程序AuthN / AuthZ?

时间:2018-10-11 05:53:47

标签: android azure-ad-b2c

此处的当前Azure ADB2C Mobile应用程序示例在应用程序外部强制打开浏览器组件,并且在登录后重定向回该应用程序。

是否可以完全跳过此丑陋且笨拙的“登录”页面,并直接从移动应用程序组件进行登录/注册?我想创建自己的登录Activity,所以我只去门户网站通过REST uri获取令牌,而不必在应用程序外部打开浏览器。

2 个答案:

答案 0 :(得分:0)

您可以创建a resource owner policy,使您能够在移动应用程序中收集用户凭据,然后在Azure AD B2C租户中对其进行验证。

您可以使用AppAuth for AndroidAppAuth for iOS之类的客户端库来为您管理策略调用。

答案 1 :(得分:0)

这是一个古老的问题,但是一年后这个问题仍然引起我的共鸣。有一个答案:

.WithUseEmbeddedWebView(true)

完整的摘录(摘自Azure GitHub示例)为:

async void OnLoginButtonClicked(object sender, EventArgs e)
    {
        AuthenticationResult result;
        try
        {
            //bool useEmbeddedWebView = !App.IsSystemWebViewAvailable;
            result = await App.AuthenticationClient
                .AcquireTokenInteractive(Constants.Scopes)
                .WithPrompt(Prompt.SelectAccount)
                .WithParentActivityOrWindow(App.UIParent)
                .WithUseEmbeddedWebView(true)
                .ExecuteAsync();

            await Navigation.PushAsync(new LogoutPage(result));
        }
        catch (MsalException ex)
        {
            if (ex.Message != null && ex.Message.Contains("AADB2C90118"))
            {
                result = await OnForgotPassword();
                await Navigation.PushAsync(new LogoutPage(result));
            }
            else if (ex.ErrorCode != "authentication_canceled")
            {
                await DisplayAlert("An error has occurred", "Exception message: " + ex.Message, "Dismiss");
            }
        }
    }

请注意,这不是一个完整的解决方案,但确实会迫使B2C模板加载到WebView中,而不是打开浏览器并显示您的域名。将其放在共享代码项目中。

您不会使用自己的登录页面,但是它至少看起来像是您应用程序的一部分。

参考:Xamarin Considerations

希望Microsoft在以后的版本中解决此问题。