如何从Azure已加入的HoloLens 2获取AAD Token用于API认证?
获取HoloLens 2上已缓存的AAD Token
核心类与方法
你需要使用Windows Runtime的Windows.Security.Authentication.Web.Core命名空间下的类,核心组件如下:
- WebAuthenticationCoreManager:管理系统级身份验证会话,可直接访问已登录用户的缓存Token
- WebTokenRequest:定义Token请求的关键参数(如AAD租户ID、应用客户端ID、目标API资源URI)
实现步骤
配置应用权限
在Package.appxmanifest中添加enterpriseAuthentication和privateNetworkClientServer权限,确保应用能访问系统身份验证服务。构建Token请求
using Windows.Security.Authentication.Web.Core; using Windows.Security.Credentials; // 替换为你的AAD参数 string tenantId = "你的租户ID"; string clientId = "你的应用客户端ID"; string targetResource = "目标API的资源URI(如https://graph.microsoft.com)"; // 获取AAD身份验证提供器 var authProvider = WebAuthenticationCoreManager.FindAccountProviderAsync("https://login.microsoft.com", tenantId).GetAwaiter().GetResult(); // 构建静默Token请求(不弹出登录界面) var tokenRequest = new WebTokenRequest(authProvider, targetResource, clientId); tokenRequest.Properties.Add("prompt", "silent");
- 获取缓存Token
// 获取设备上已登录的AAD账户 var accounts = WebAuthenticationCoreManager.FindAllAccountsAsync(authProvider).GetAwaiter().GetResult(); if (accounts.Count > 0) { var tokenResult = WebAuthenticationCoreManager.GetTokenSilentlyAsync(tokenRequest, accounts[0]).GetAwaiter().GetResult(); if (tokenResult.ResponseStatus == WebTokenRequestStatus.Success) { string cachedAadToken = tokenResult.ResponseData[0].Token; // 用该Token进行API认证 } else { // 缓存中无有效Token,需触发重新登录流程 } }
关键说明
- 静默模式:设置
prompt=silent后,会优先从系统缓存读取Token,仅当Token过期或不存在时请求失败,避免干扰用户操作 - 账户匹配:
FindAllAccountsAsync返回设备上所有已登录的AAD账户,可根据需求筛选目标账户 - 前置条件:确保应用已在AAD中完成注册,客户端ID、资源URI配置正确,且HoloLens设备已加入Azure AD或用户已完成AAD登录
内容的提问来源于stack exchange,提问作者Fabian H.
相关产品推荐
相关产品推荐

