我目前在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);
有没有办法强制使用网页浏览而不是浏览器?
答案 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
接受布尔值