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),用户可以在其中 select 他首选的签名方法 in/up
一切正常,用户点击 "log in",ADAL 从后端(facebook、g+、...)加载身份提供者,当您 select 时,您会得到预期的结果来自相应提供商的登录屏幕。
问题是,当用户实际使用他们的社交帐户登录时,应用程序突然 returns 进入主屏幕。
如果我随后检查日志,我会看到此错误:
"Not allowed to load local resource: file:///android_asset/webkit/android-weberror.png", source: data:text/html,chromewebdata (12)
我知道这是一项安全功能,有很多方法可以解决这个问题,但由于所有内容都是在 ADAL 内部生成的,而且我无法访问库的源代码来更改 webview 设置,所以我必须这样做其他方式。
据我所知,我也无法更改 Chromium 的全局设置,所以我有点卡住了。
还有其他人遇到过这个问题吗?或者,更好的是,知道解决方法?
也许我可以使用铬的替代品? (虽然我不确定它是如何工作的,因为我无法编辑 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 决定所有这些突然变得很酷。
我不知道为什么,但现在可以了。我确定他妈的没有更改代码...
首先是一些快速信息:
- 该应用程序是使用 Xamarin 在 c# 中编写的
- 对于身份验证,我使用 Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory 包版本 4.0.209160138-alpha(或简称 ADAL)
- 后端使用 B2C 运行 AAD
这样做的方式是 azure 会向用户展示一个 webview(至少我怀疑它是一个 webview),用户可以在其中 select 他首选的签名方法 in/up
一切正常,用户点击 "log in",ADAL 从后端(facebook、g+、...)加载身份提供者,当您 select 时,您会得到预期的结果来自相应提供商的登录屏幕。
问题是,当用户实际使用他们的社交帐户登录时,应用程序突然 returns 进入主屏幕。 如果我随后检查日志,我会看到此错误:
"Not allowed to load local resource: file:///android_asset/webkit/android-weberror.png", source: data:text/html,chromewebdata (12)
我知道这是一项安全功能,有很多方法可以解决这个问题,但由于所有内容都是在 ADAL 内部生成的,而且我无法访问库的源代码来更改 webview 设置,所以我必须这样做其他方式。 据我所知,我也无法更改 Chromium 的全局设置,所以我有点卡住了。
还有其他人遇到过这个问题吗?或者,更好的是,知道解决方法? 也许我可以使用铬的替代品? (虽然我不确定它是如何工作的,因为我无法编辑 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 决定所有这些突然变得很酷。
我不知道为什么,但现在可以了。我确定他妈的没有更改代码...