【问题标题】:RedirectURI does not redirect for Mobile using WebAuthenticator.AuthenticateAsyncRedirectURI 不会使用 WebAuthenticator.AuthenticateAsync 为移动设备重定向
【发布时间】:2022-12-10 05:05:44
【问题描述】:

我正在尝试使用 Xamarin.Essentials.WebAuthenticator 来使用 Azure AD 进行身份验证,而 Azure AD 又应该使用 WebAuthenticatorResult 回调我的移动应用程序。该过程一直进行到回调 URI 应回调到我的应用程序的地步。

  1. 移动应用程序中的命令调用 AuthenticateAsync 方法被触发。
  2. 移动设备上打开了一个新的网络浏览器,系统提示我输入我的 Microsoft 凭据
  3. 使用我的组织用户凭据登录。
  4. 登录成功。
  5. 错误消息显示

    回调 URI 永远不会被触发,我唯一的选择是关闭浏览器,然后在我的应用程序中抛出异常,当进程失败或用户关闭浏览器时,这是预期的。身份验证结果永远不会在我的应用程序中返回。

    我希望发生的事情是,一旦身份验证成功,浏览器会将浏览器重定向到 RedirectURI,我的移动应用程序会处理它。

    我是不是误解了它应该如何工作,还是我配置错误?

    从我的 ViewModel 调用的 WebAuthenticator

    async Task<bool> SSOLogin()
            {
                ErrorMessage = string.Empty;
    
                try
                {
                    var authRequestUrl = new Uri("https://myapps.microsoft.com/signin/2borno2-1234-abcd-baba-42aaa70ab1da?tenantId=ab12ac17-4321-acbd-1234-72aae60ed1ca6");
                    
                    var callbackUrl = new Uri("mobile://myapp");
    
                    var authResult = await WebAuthenticator.AuthenticateAsync(new WebAuthenticatorOptions
                    {
                        Url = authRequestUrl,
                        CallbackUrl = callbackUrl,
                        PrefersEphemeralWebBrowserSession = true
                    });
    
                    var accessToken = authResult?.AccessToken;
                    return true;
                }
                catch(Exception e)
                {
                    var msg = e.Message;
                }
                finally
                {
                    IsBusy = false;
                }
                return false;
            }
    

    处理回调 URI 的活动 (mobile://myapp)

        [Activity(NoHistory = true, LaunchMode = LaunchMode.SingleTop, Exported = true)]
        [IntentFilter(new[] { Android.Content.Intent.ActionView },
            Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
            DataScheme = "mobile")]
        public class WebAuthenticationCallbackActivity : Xamarin.Essentials.WebAuthenticatorCallbackActivity
        {
    
        }
    

    Azure AD 应用程序设置

    注意租户 ID 和客户端 ID 不是我正在使用的实际 ID。我相信这些都可以正常工作,因为移动应用程序中的浏览器会将我带到正确的登录页面,并且错误消息会显示我在 Azure AD 中设置的应用程序名称。

【问题讨论】:

    标签: android xamarin.forms azure-active-directory


    【解决方案1】:

    屏幕截图中的登录 URL 错误(“应用程序未定义的登录 URL”)通常表示您需要在应用程序注册的品牌标签下设置主页 URL。

    从您的其他屏幕截图中,我无法判断您是否选中了 mobile://myapp URL 旁边的复选框以将其设为默认值。如果您还没有这样做并且添加了多个重定向 URI,则默认情况下将选择第一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多