【发布时间】:2016-01-25 06:55:21
【问题描述】:
先了解一些快速信息:
- 应用程序是使用 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 设置,所以我必须做一些其他的事情大大地。 据我所知,我也无法更改 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) 上对其进行了测试,它确实可以工作,所以这不是代码的逻辑。
【问题讨论】:
标签: android azure webview xamarin adal