Android ADAL不允许加载本地资源

时间:2015-10-26 08:20:25

标签: android azure webview xamarin adal

首先是一些快速信息:

  • 使用Xamarin
  • 在c#中编写应用程序
  • 对于身份验证,我使用Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory包版本4.0.209160138-alpha(或简称ADAL)
  • 后端使用B2C运行AAD

这样做的方式是azure会向用户显示一个webview(至少我怀疑它是一个webview),他或她可以选择他/她的首选登录方式

一切正常,用户点击"登录",ADAL从后端加载身份提供者(facebook,g +,...),当你选择一个时,你得到了预期的标志 - 来自相应提供商的屏幕。

问题在于,当用户实际使用其社交帐户登录时,应用程序会突然返回到主屏幕。 如果我然后检查日志我看到这个错误:

"Not allowed to load local resource: file:///android_asset/webkit/android-weberror.png", source: data:text/html,chromewebdata (12)

我知道这是一个安全功能,并且可以解决这个问题,但由于所有内容都是在ADAL中生成的,因为我无法访问库的源代码来更改webview设置I&#39 ;我必须以其他方式做到这一点。 而且据我所知,我无法改变铬的全局设置,所以我有点卡住了。

还有其他人有这个问题吗?或者,更好的是,知道一个解决方法? 也许我可以使用替代铬? (尽管我不确定这是如何工作的,因为我无法编辑ADAL的内部工作,但它似乎不是开源的)

用于生成所有这些的代码非常简单(大多数是自动化的或在ADAL中完成):

        public async Task<AuthenticationResult> Login(IPlatformParameters parameters, bool isSignIn)
    {
        var authContext = new AuthenticationContext(AUTHORITY_URL, new TokenCache());

        if (CORRELATION_ID != null &&
                CORRELATION_ID.Trim().Length != 0)
        {
            authContext.CorrelationId = Guid.Parse(CORRELATION_ID);
        }

        String policy = "";
        if (isSignIn)
            policy = EMAIL_SIGNIN_POLICY;
        else
            policy = EMAIL_SIGNUP_POLICY;

        return await authContext.AcquireTokenAsync(SCOPES, ADDITIONAL_SCOPES, CLIENT_ID, new Uri(REDIRECT_URL), parameters, UserIdentifier.AnyUser, EXTRA_QP, policy);            
    }
}

编辑:在较旧版本的android(api 15)上测试它,它确实有用,所以它不是代码的逻辑。

2 个答案:

答案 0 :(得分:0)

所有版本的ADAL都是开源的。您可以在此处找到此特定版本的来源:

https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/tree/Convergence-v4-RELEASE

答案 1 :(得分:0)

因此,无论什么奇怪的原因,机器人决定它突然凉爽所有这一切。

我不知道为什么,但它现在正在运作。我确定没有改变代码......