恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
melty 内建 Microsoft 账号认证扩展:microsoft 与 microsoft-sovereign-cloud 认证 Provider 原理与配置指南
首页
资讯中心
/
melty 内建 Microsoft 账号认证扩展:microsoft 与 microsoft-sovereign-cloud 认证 Provider 原理与配置指南
melty 内建 Microsoft 账号认证扩展:microsoft 与 microsoft-sovereign-cloud 认证 Provider 原理与配置指南
发布时间:2026/10/15 2:30:07
AI 应用开发工具【免费下载链接】meltyChat first code editor. To download the packaged app:项目地址https://gitcode.com/gh_mirrors/me/melty点击查看免费下载导读本文围绕 melty 仓库中内建的microsoft-authentication扩展展开。该扩展为编辑器提供microsoft认证 Provider支撑Settings Sync设置同步及各类依赖微软账号登录的扩展同时提供面向 Azure 主权云如 Azure 中国、Azure 美国政府的microsoft-sovereign-cloud认证 Provider。读完本文你将掌握这两个 Provider 的注册机制、全部配置项与取值含义、PKCE 登录流程与令牌刷新的底层实现并能在自己的扩展中正确复用该认证能力。扩展概览随编辑器捆绑、可禁用不可卸载扩展的官方说明位于 extensions/microsoft-authentication/README.md其中第一段就明确了它的特殊地位随 Visual Studio Code / melty 捆绑发布用户无需单独安装只能禁用disable、不能卸载uninstall它被产品视为基础认证设施的一部分。从 extensions/microsoft-authentication/package.json 的contributes.authentication声明可以看到它注册了两个认证 Providerauthentication: [ { label: Microsoft, id: microsoft }, { label: Microsoft Sovereign Cloud, id: microsoft-sovereign-cloud } ]其中microsoft供其他扩展通过 VS Code 认证 API 复用例如vscode.authentication.getSession(microsoft, scopes)并承担Settings Sync的微软账号登录microsoft-sovereign-cloud则用于登录 Azure 中国、Azure 美国政府等非公有云环境。该扩展声明了engines: { vscode: ^1.42.0 }、extensionKind: [ui, workspace]并在capabilities中声明支持virtualWorkspaces与untrustedWorkspaces均为true意味着它在远程/虚拟/不受信任工作区中也能正常工作依赖方面使用了azure/ms-rest-azure-env云环境定义、azure/msal-nodeMSAL 登录库与vscode/extension-telemetry。两个认证 Provider 的职责划分microsoft公有云账号登录microsoftProvider 使用 Azure 公有云Environment.AzureCloud的 Active Directory 端点负责Settings Sync 的微软账号认证用户通过“打开设置同步”触发登录后同步服务拿到该 Provider 提供的 token 完成数据同步。其工作流在 src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts 中通过authenticationService.getSessions(id, scopes)取回会话其他扩展的微软账号复用任何扩展都可以用统一的microsoftProvider ID 请求会话无需各自实现 OAuth。microsoft-sovereign-cloud主权云账号登录microsoft-sovereign-cloudProvider 面向与公有云隔离的 Azure 环境README 明确列举了典型场景Azure for US Government美国政府云、Azure China中国云并提示“不同环境可能还需要不同的 scopes”。该 Provider 的启用与否由配置项决定当microsoft-sovereign-cloud.environment未设置时extensionV1.ts 中的初始化函数直接返回undefined即不注册该 Provider只有显式选择环境后才会激活。配置项完整说明以仓库实际代码为准全部配置声明在 extensions/microsoft-authentication/package.json 的contributes.configuration中本地化文案见 extensions/microsoft-authentication/package.nls.json。注意README 中写的是microsoft-sovereign-cloud.endpoint而仓库实际代码与配置 schema 使用的是microsoft-sovereign-cloud.environment端点 URL 由该枚举/自定义对象间接决定。本文以实际代码为准。1.microsoft-sovereign-cloud.environment字符串枚举选择用于认证的主权云环境可选值及含义取值含义来自 package.nls.jsonChinaCloudAzure China中国云USGovernmentAzure US Government美国政府云custom自定义主权云此时必须同时配置microsoft-sovereign-cloud.customEnvironment代码层面extensionV1.ts的逻辑为若为custom则将customEnvironment对象通过Environment.add(customEnv)注册进azure/ms-rest-azure-env否则直接用枚举名作为环境名随后用Environment.get(name)取出真实环境含activeDirectoryEndpointUrl等端点校验失败会弹出错误提示并提供“打开设置”入口。2.microsoft-sovereign-cloud.customEnvironment对象自定义主权云的完整端点配置package.json中标记了 6 个必填字段字段说明name自定义主权云名称将作为 Provider 显示名portalUrl该云的 Portal URLmanagementEndpointUrl管理端点resourceManagerEndpointUrl资源管理器端点activeDirectoryEndpointUrlActive Directory 认证端点用于拼接 authorize/token 请求activeDirectoryResourceIdActive Directory 资源 ID一个典型的settings.json配置示例{ microsoft-sovereign-cloud.environment: custom, microsoft-sovereign-cloud.customEnvironment: { name: MySovereignCloud, portalUrl: https://portal.example.com, managementEndpointUrl: https://management.example.com, resourceManagerEndpointUrl: https://management.example.com/resources, activeDirectoryEndpointUrl: https://login.example.com, activeDirectoryResourceId: https://management.example.com/ } }配置合法性的校验同样在激活逻辑中完成Environment.add(customEnv)抛错时会提示“Error validating custom environment setting”。3.microsoft.useMsal布尔值默认false该开关决定扩展底层采用哪套认证实现。从 extension.ts 可以看到激活时的分派逻辑const useMsal workspace.getConfiguration(microsoft).getboolean(useMsal, false); // Only activate the new extension if we are not running in a browser environment if (useMsal typeof navigator undefined) { await extensionV2.activate(context); // MSAL-node 实现 } else { await extensionV1.activate(context); // 自研 AADHelper 实现 }即useMsal true且非浏览器环境时启用基于 MSAL 的 V2 实现否则走自研 OAuth 实现V1。修改该配置后扩展会弹出“Reload required”模态提示确认后执行workbench.action.reloadWindow重载窗口同一文件的onDidChangeConfiguration监听。源码级实现纵深双实现架构自研 OAuth 与 MSAL 并存仓库中存在两套完整的登录实现目录结构如下V1默认src/AADHelper.ts中的AzureActiveDirectoryServicesrc/node/authServer.ts的LoopbackAuthServer自行实现授权码流程V2可选src/node/authProvider.ts中的MsalAuthProvider基于azure/msal-node的PublicClientApplication令牌缓存通过src/common/cachePlugin.ts的SecretStorageCachePlugin持久化到 SecretStoragesrc/node/publicClientCache.ts按clientId authority管理多个 PCA 实例。两套实现都支持supportsMultipleAccounts多账号且都注册了microsoft与microsoft-sovereign-cloud两个 Provider。登录流程PKCE 授权码 多通道回跳以 V1 的 AADHelper.ts 为例doCreateSession会按运行环境选择回跳方式本机回环服务器createSessionWithLocalServerAADHelper.ts生成code_verifier与code_challengeS256构造 authorize URL含response_typecode、client_id、scope、code_challenge有login_hint时附带、否则promptselect_account启动LoopbackAuthServer用vscode.env.openExternal打开http://127.0.0.1:port/signin?nonce...等待 OAuth 回调超时 5 分钟无本地服务器createSessionWithoutLocalServer适用于远程/无服务器环境通过vscode.env.asExternalUri生成vscode.microsoft-authentication回调 URI把完整回调地址编码进state再用UriEventHandlerUriEventHandler.ts监听系统级 URI 回调若当前环境不支持 URI 方案见 common/uri.ts 的isSupportedEnvironment仅桌面端、localhost 及vscode.dev/github.dev/github.localhost判定为支持则退化为弹出 InputBox 让用户手动粘贴授权码handleCodeInputBox。拿到code后exchangeCodeForSession以grant_typeauthorization_codecode_verifier换取令牌token 端点请求带指数退避重试fetchTokenResponse最多重试 3 次5 * attempts^2 * 1000毫秒间隔4xx 错误会抛出以提示用户重新登录。V2 的MsalAuthProvider.createSessionnode/authProvider.ts则直接调用acquireTokenInteractive优先使用回环模板页若用户取消或出现CancellationError会询问“是否尝试用协议处理器方式登录”再降级到UriHandlerLoopbackClientcommon/loopbackClientAndOpener.ts。Scope 处理默认 scope 与内部 VSCODE_ scope两套实现共用ScopeDatacommon/scopeData.ts核心规则自动补齐 4 个默认 scopeopenid、email、profile、offline_access缺失才补且全部排序支持两个内部专用 scopeVSCODE_CLIENT_ID:id指定自定义 client ID、VSCODE_TENANT:tenant指定租户它们只用于决定请求参数不会发送给 token 端点scopesToSend会过滤VSCODE_前缀的 scope未指定时的默认值client ID 为aebc6443-996d-45c2-90f0-388ff96faa56租户为organizations。这些行为由 common/test/scopeData.test.ts 的单元测试逐条锁定例如测试“应过滤内部 VSCODE scopes”“应使用默认 client ID 或VSCODE_CLIENT_IDscope 指定的值”等。令牌刷新与多窗口同步V1 中AzureActiveDirectoryService将令牌保存在内存并用setSessionTimeout在expiresIn × 2/3约过期前 1/3 时间提前发起刷新doRefreshTokengrant_typerefresh_token网络失败时REFRESH_NETWORK_FAILURE以 30 分钟间隔轮询重试POLLING_CONSTANT 1000 * 60 * 30。会话持久化通过 betterSecretStorage.ts 的BetterTokenStorage完成它用 SecretStorage 保存“key 列表 每个会话的 refresh token”并提供onDidChangeInOtherWindow事件。AzureActiveDirectoryService监听该事件实现多窗口同步其他窗口登录/登出后本窗口自动刷新会话列表并通过sessionMatchesEndpoint按 Active Directory 端点区分公有云与主权云会话避免跨环境串用storeToken在窗口失焦时会先挂起写入待窗口重新聚焦onDidChangeWindowState或后台定时器5 小时 随机 0~30 秒触发时再落盘并只在刷新令牌变化时才真正写 SecretStorageaccess token 寿命短不持久化。V2 的CachedPublicClientApplicationnode/publicClientCache.ts则在每次静默获取后按refreshOn/expiresOn提前 5 分钟安排acquireTokenSilent({ forceRefresh: true })预刷新并通过SecretStorageCachePlugin持久化 MSAL 缓存getAllAccounts比对前后账号集合向 Provider 派发added/deleted变更事件。浏览器Web环境的限制浏览器环境下microsoft.useMsal分支不会生效typeof navigator undefined条件V1 实现负责 Web 端V1 的doCreateSession明确禁止在 Webserverless环境登录非公有云Sign in to non-public clouds is not supported on the web.AADHelper.tssrc/browser/authProvider.ts中的MsalAuthProvider仅是占位骨架方法直接抛Method not implemented表明 MSAL 路径目前仅面向桌面端。如何在自己的扩展中复用该认证其他扩展无需依赖此扩展的代码只需使用 VS Code 认证 API例如import * as vscode from vscode; const session await vscode.authentication.getSession( microsoft, [https://graph.microsoft.com/User.Read], { createIfNone: true } );Provider ID 固定为microsoft或microsoft-sovereign-cloud需要的权限范围scope在请求时传入扩展会自动补齐openid/email/profile/offline_access若需以特定 client ID / 租户登录可在 scope 中加入VSCODE_CLIENT_ID:id或VSCODE_TENANT:tenant多账号场景下可通过getSessions的account过滤参数指定账号。注意事项与常见问题主权云需要额外 scopeREADME 明确提醒“不同环境可能也需要不同的 scopes”切换到ChinaCloud/USGovernment后若资源端点不同请相应调整请求的 scope配置变更即时生效microsoft-sovereign-cloud相关配置变化会触发 Provider 销毁重建onDidChangeConfiguration监听见 extensionV1.ts无需重载窗口而microsoft.useMsal变更则需要重载登录超时交互式登录整体超时 5 分钟超时或取消会走备选登录方式或报错Web 端限制浏览器环境无法登录非公有云且 V2MSAL实现目前不用于 Web无法卸载该扩展随产品捆绑只能通过扩展管理器禁用。参考路径汇总扩展说明extensions/microsoft-authentication/README.md扩展清单与配置 schemaextensions/microsoft-authentication/package.json激活入口与实现分派extensions/microsoft-authentication/src/extension.tsV1 自研认证服务extensions/microsoft-authentication/src/AADHelper.tsV2 MSAL 认证服务extensions/microsoft-authentication/src/node/authProvider.tsScope 处理与测试extensions/microsoft-authentication/src/common/scopeData.ts、extensions/microsoft-authentication/src/common/test/scopeData.test.ts令牌存储与多窗口同步extensions/microsoft-authentication/src/betterSecretStorage.tsSettings Sync 的会话获取src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts赞分享AI 应用开发工具【免费下载链接】meltyChat first code editor. To download the packaged app:项目地址https://gitcode.com/gh_mirrors/me/melty点击查看免费下载相关推荐Positron 中的 Microsoft 认证扩展microsoft 与 microsoft-sovereign-cloud 认证提供者深度解析Positron 中的 Microsoft 认证扩展 microsoft 与 microsoft sovereign cloud 认证提供者深度解析 导读 e开发工具代码编辑器数据科学void 开源 AI 代码编辑器中的 Microsoft 认证扩展内置 microsoft 与 microsoft-sovereign-cloud 认证提供者详解void 开源 AI 代码编辑器中的 Microsoft 认证扩展内置 microsoft 与 microsoft sovereign cloud 认证提供者代码编辑器开发工具AI Agent人工智能Azure Data Studio 中的 Microsoft 认证扩展microsoft 与 microsoft-sovereign-cloud 认证提供程序深度解析Azure Data Studio 中的 Microsoft 认证扩展 microsoft 与 microsoft sovereign cloud 认证提供程数据库客户端数据库桌面应用后端上一篇qwen1.5_72b_chat量化权重导出工具详解脚本使用与参数配置指南下一篇GitHub webhooks配置与测试从创建到部署的简单步骤创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考