用途:当 MAUI 应用需要登录、令牌处理、本地密钥安全存储,或在原生页面与 Blazor Hybrid UI 之间共享认证状态时使用本技能。
主要能力:可选择 WebAuthenticator(提供商中立的 OAuth/OIDC 浏览器重定向)或 MSAL.NET(Microsoft Entra ID,账户选择、静默取令牌、broker 集成)。需在身份提供商和平台应用配置中同时注册重定向 URI,且 scheme/host 完全一致。认证逻辑应放在注入服务(如 IAuthService)后,不直接写入页面或 ViewModel。使用 MSAL 时由其管理令牌缓存;SecureStorage 仅用于应用自有小密钥,非 MSAL 提供商需要自管刷新令牌时再用。取令牌先尝试 AcquireTokenSilent,仅在被缓存账户缺失、需要同意或静默返回需 UI 时才交互式登录;需检查 MsalUiRequiredException.Classification 等,Conditional Access 或 Intune 策略失败需合规 UX 或 Intune MAM,而非重复弹窗。退出时先 GetAccountsAsync() 并 RemoveAsync(account) 清除 MSAL 账户。
使用方式:WebAuthenticator 用 AuthenticateAsync 配合 WebAuthenticatorOptions 的 Url 与 CallbackUrl,检查 result.Properties 中的 error 与 code;建议使用 PKCE,授权码经安全后端或公共客户端流交换,不在应用内嵌 client secret。MSAL 注册方式示例:builder.Services.AddSingleton<IAuthService, MsalAuthService>(); 公共客户端需显式重定向 URI,如 .WithRedirectUri("msal{client-id}://auth")。
平台配置:Android 需继承 WebAuthenticatorCallbackActivity 的 Activity 并添加 IntentFilter;iOS/Mac Catalyst 需在 CFBundleURLTypes 添加回调 scheme,MSAL broker 流程还需 LSApplicationQueriesSchemes 中的 msauthv2、msauthv3;Windows 在包清单或应用标识中注册自定义协议。
SecureStorage 限制:仅存小密钥,重装、备份恢复、设备锁变更后取不到值属正常;Mac Catalyst 需在 Entitlements.plist 配置 Keychain Sharing,iOS/Mac Catalyst 扩展读取宿主密钥需共享 keychain 访问组;不得记录令牌、授权码、id_token、刷新令牌或完整回调 URL。
Blazor Hybrid:原生认证服务注册到 MAUI DI 供 Razor 组件注入;需要 [Authorize]/AuthorizeView 时实现 AuthenticationStateProvider;通过类型化 HttpClient 处理器附加最新访问令牌;退出时同时清除 MSAL 账户、SecureStorage 值与 Blazor 认证状态,不依赖浏览器 cookie 或本地存储。原文未提供官方文档、版本要求、收费或价格信息。