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 登录 - “包含阻止加载的脚本错误”

我应该如何获取 Azure AD B2C 用户的上次登录时间戳?

Azure AD B2C:自定义策略 - 登录不起作用