簡體   English   中英

Android ADAL不允許加載本地資源

[英]Android ADAL not allowed to load local resource

首先提供一些快速信息:

  • 該應用程序是使用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設置,因此我將不得不采用其他方法。 據我所知,我也不能更改Chrome的全局設置,所以我有點卡住了。

其他人遇到過這個問題嗎? 或者,甚至更好地知道解決方法? 也許我可以使用鉻的替代品? (盡管我不確定該如何工作,因為我無法編輯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)上對其進行了測試,並且確實可以正常工作,因此這不是代碼的邏輯。

所有版本的ADAL都是開源的。 您可以在以下位置找到此特定版本的源:

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

因此,無論出於什么奇怪的原因,android都認為這一切都變得很酷。

我不知道為什么,但是現在可以正常工作。 我確定地獄沒有更改代碼...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM