Xamarin Azure AD B2C 登录,卡在登录页面
Posted
技术标签:
【中文标题】Xamarin Azure AD B2C 登录,卡在登录页面【英文标题】:Xamarin Azure AD B2C login, stuck at login page 【发布时间】:2020-02-02 22:20:48 【问题描述】:我正在尝试使用 AAD B2C 身份验证登录到 xamarin 移动应用程序。我已经在 Visual Studio 中创建了解决方案。在 Azure 中,我创建了我的租户,注册了一个本机应用程序和一个 Web 应用程序(下面的属性)并尝试调试我的应用程序。目前,我被重定向到 B2Clogin 页面,可以输入用户名和密码。然后它处理请求并无限期地停留在该页面上。当我检查 azure 门户时,我可以看到我通过 B2C 登录页面创建的帐户,并且我可以看到成功登录,但 B2C 登录页面没有重定向回我的应用程序。 我还在 AppDelegate.cs 和 MainActivity.cs 中使用 AuthenticationContinuationHelper
在 App.cs 中
````
public static string B2CClientEndpoint = "<UserFlowAuthorizationEndpoint>"; //the endpoint generated when we ran the user flow.
public static string[] B2CScopes = "<RegisteredWebAPI.Read>" ;
PCAB2C = PublicClientApplicationBuilder.Create(B2CClientID)
.WithB2CAuthority("https://<DirectoryName>.b2clogin.com/tfp/<DirectoryName>.onmicrosoft.com/<Policy>")
.WithiosKeychainSecurityGroup("<SecurityGroup>")
.WithRedirectUri("msal<ApplicationID>://auth")
.Build();
````
在控制器类中
````C#
IAccount User = Accounts.FirstOrDefault();
if (Accounts.Count() != 0)
Result = await App.PCAB2C.AcquireTokenSilent(App.B2CScopes, User)
.WithB2CAuthority("<B2CSignInAuthority>")
.ExecuteAsync();
else
User = Accounts.FirstOrDefault();
Result = await App.PCAB2C.AcquireTokenInteractive(App.B2CScopes)
.WithB2CAuthority("<B2CSignInAuthority>")
.WithParentActivityOrWindow(App.ParentWindow)
.WithAccount(User)
.ExecuteAsync();
```
【问题讨论】:
【参考方案1】:根据AD B2C的official documentation,
要在隐藏的 iframe 中刷新并获取令牌,请使用 prompt=none 以确保 iframe 不会卡在登录页面并立即返回。
因此,基本上,请验证您的 URL,并且不要忘记查看错误响应!
【讨论】:
我尝试添加 withprompt(prompt.noprompt) 仍然无法正常工作,没有任何变化 在 URL 末尾添加“&prompt=none”没有解决问题? 我没有网址。 Xamarin 方法根据选项自动格式化 URL 并将其发送到方法中。添加该属性声明做同样的事情。【参考方案2】:我遇到了这个问题,并通过降低最低目标 android 和 iOS 版本来解决它。
即:Android 8.0 及更高版本和 iOS 最低 13.0
显然,MSAL 在 Xamarin Forms 构建中有一个最低操作系统版本。
【讨论】:
以上是关于Xamarin Azure AD B2C 登录,卡在登录页面的主要内容,如果未能解决你的问题,请参考以下文章
Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)
Azure AD B2C 自定义登录策略显示 SignUpSignIn
Azure AD B2C密码更改自定义策略,用户每次都需要登录
Azure AD B2C 登录 - “包含阻止加载的脚本错误”