用途:为 .NET MAUI 应用接入身份验证,覆盖两条路线——WebAuthenticator 用于通用 OAuth 2.0 / OIDC 与社交登录,MSAL.NET 用于 Microsoft Entra ID(Azure AD),支持代理(Microsoft Authenticator、Company Portal)、条件访问与 MFA。
主要能力与选择依据:WebAuthenticator 适用于 Google、Apple、通用 OIDC,实现简单,但无代理 SSO,令牌缓存与刷新需手动(配合 SecureStorage),条件访问与 MFA 需自行处理。MSAL.NET 适用于 Entra ID / Azure AD 与 Microsoft Graph,内置令牌缓存与刷新、条件访问与 MFA,但配置更复杂。
安全要点:绝不在移动应用二进制中嵌入客户端密钥、API 密钥或签名密钥,反编译即可提取。正确模式是应用通过 WebAuthenticator 指向自有服务器端点,由服务器持有客户端密钥并完成与身份提供方的 OAuth 流程,再将令牌经回调 URI 返回应用。
常见陷阱:Windows 上 WebAuthenticator 当前不可用(见 dotnet/maui#2702),需改用 MSAL 或 WinUI 专用方案;Apple 登录仅在首次返回姓名与邮箱,需立即缓存;iOS 13+ 可设 PrefersEphemeralWebBrowserSession 为 true 强制重新登录;回调 URI 不匹配是最常见失败原因,需与 Android IntentFilter 的 DataScheme/DataHost、iOS Info.plist 的 CFBundleURLSchemes、Windows Package.appxmanifest 的 Protocol Name 完全一致。
MSAL.NET 要点:Android 需在 MainActivity.OnActivityResult 调用 AuthenticationContinuationHelper;iOS 需在 Entitlements.plist 配置钥匙串组 com.microsoft.adalcache;AcquireTokenSilent 抛出 MsalUiRequiredException 时应回退到 AcquireTokenInteractive;用户取消(authentication_canceled)不应视为错误。Blazor Hybrid 中认证须在 MAUI 层完成,通过自定义 MsalAuthenticationStateProvider 向 Blazor 暴露状态,并用 DelegatingHandler 自动附加令牌。
限制:资料未提供具体安装命令、版本要求与完整代码示例,相关细节暂未提供。