You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Visual Studio Code扩展实现自定义AuthenticationProvider?

VS Code 自定义AuthenticationProvider OAuth2功能实现指南

AuthenticationProvider 核心运行逻辑

VS Code的AuthenticationProvider是扩展统一管理身份会话的标准接口,注册自定义Provider后,VS Code会自动接管会话的持久化、唤起逻辑,你只需要实现三个核心方法即可:

  • getSessions(scopes?: string[]):返回当前已存在的有效会话,可在该方法内完成access token过期后的无感刷新
  • createSession(scopes: string[]):触发全新的授权流程,返回新创建的会话
  • removeSession(sessionId: string):清理指定会话的存储信息

createSession 完整授权流程实现

createSession为异步方法,支持等待全流程执行完成后再返回结果,不需要同步返回,具体执行步骤如下:

  1. 生成随机CSRF state值并临时存储,构造OAuth2授权端点URL,携带client_id、redirect_uri、scope、state等必填参数
  2. 调用vscode.env.openExternal()方法唤起系统默认浏览器跳转至构造好的授权URL
  3. 启动本地临时HTTP服务,监听OAuth服务的回调请求,可指定http://127.0.0.1:0作为回调地址,让系统自动分配空闲端口避免冲突
  4. 接收回调请求后,首先校验返回的state和之前存储的state是否一致,校验通过后提取返回的code参数
  5. 用code向OAuth服务的令牌端点发起请求,获取access_token、refresh_token、过期时间等凭证
  6. 关闭临时HTTP服务,构造符合VS Code规范的AuthenticationSession对象返回,VS Code会自动完成会话的持久化存储

Refresh Token 无感刷新实现

你不需要每次token过期都重新调用createSession让用户二次授权:
在getSessions方法中,先校验当前存储的会话中access_token是否已过期,若已过期则直接用会话中存储的refresh_token向令牌端点发起刷新请求,拿到新的access_token、refresh_token后更新当前会话的对应字段,再返回更新后的会话即可实现用户无感知的凭证刷新。

关键注意事项

  • 本地临时HTTP服务无论授权成功还是失败都要主动关闭,避免端口残留占用
  • 必须校验state参数的一致性,防止CSRF攻击
  • redirect_uri需要和你在OAuth服务端注册的地址完全匹配
  • 敏感凭证信息不要输出到日志或存储到VS Code官方会话存储之外的位置

内容的提问来源于stack exchange,提问作者daniels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:54:03