【发布时间】:2022-12-10 05:05:44
【问题描述】:
我正在尝试使用 Xamarin.Essentials.WebAuthenticator 来使用 Azure AD 进行身份验证,而 Azure AD 又应该使用 WebAuthenticatorResult 回调我的移动应用程序。该过程一直进行到回调 URI 应回调到我的应用程序的地步。
- 移动应用程序中的命令调用 AuthenticateAsync 方法被触发。
- 移动设备上打开了一个新的网络浏览器,系统提示我输入我的 Microsoft 凭据
- 使用我的组织用户凭据登录。
- 登录成功。
- 错误消息显示
回调 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 { }注意租户 ID 和客户端 ID 不是我正在使用的实际 ID。我相信这些都可以正常工作,因为移动应用程序中的浏览器会将我带到正确的登录页面,并且错误消息会显示我在 Azure AD 中设置的应用程序名称。
【问题讨论】:
标签: android xamarin.forms azure-active-directory