Xamarin MSAL Azure AD B2C登录显示浏览器而不是Web视图

时间:2017-10-23 10:51:18

标签: azure xamarin azure-ad-b2c msal

我目前在Azure AD B2C上使用Xamarin / MSAL。

它没有问题。

但是,当调用login方法时,它会显示浏览器而不是Web视图,其中包含显示URL的地址栏。根据文档,它应该显示Web视图(客户端和服务器流)?

使用此代码调用登录即时:

 AuthenticationResult ar = await App.PCA.AcquireTokenAsync(App.Scopes, GetUserByPolicy(App.PCA.Users, App.PolicySignUpSignIn), UIBehavior.ForceLogin, "ui_locales=sv", App.UiParent);

有没有办法强制使用网页浏览而不是浏览器?

3 个答案:

答案 0 :(得分:2)

正如您所发现的,您无法强制登录请求到嵌入式用户代理,但这是有充分理由的。

观察到的行为与IETF's Best Current Practice for OAuth 2.0 for Native Apps符合:

“......目前最好的做法是在外部用户代理(通常是浏览器)中执行OAuth授权请求,而不是嵌入式用户代理(例如使用Web视图实现的用户代理)。”

它进一步说:

“鼓励用户在嵌入式用户代理中输入凭据,而无需通常的地址栏和浏览器可见的证书验证功能,这使得用户无法知道他们是否正在登录合法网站;即使他们是,它训练他们可以输入凭证而无需先验证网站。“

授权服务器(例如Google)会阻止嵌入式用户代理中的OAuth授权请求“适用于存在可行替代方案的平台上的所有OAuth客户端”。

答案 1 :(得分:1)

目前,MSAL中的Xamarin Android只能启动Chrome或Chrome自定义标签。我们目前正致力于在MSAL中加入嵌入式webview支持。

答案 2 :(得分:0)

从我现在看到的内容来看,MSAL支持以下嵌入式Web视图:

await App.AuthenticationClient
                    .AcquireTokenInteractive(GlobalConstants.AzureB2C.Scopes)
                    .WithPrompt(Prompt.SelectAccount)
                    .WithUseEmbeddedWebView(true)
                    .WithParentActivityOrWindow(App.UIParent)
                    .ExecuteAsync().ConfigureAwait(false);

WithUseEmbeddedWebView接受布尔值