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

Apollo Server Azure Functions 如何更改沙箱端点适配AAD鉴权

实现方案

Apollo Server 没有提供开箱即用的独立沙箱端点配置,但可以通过拆分Azure Functions路由+调整着陆页插件参数的方式实现需求,具体操作如下:

  • 拆分两个独立的Function路由
    • 新建匿名访问路由:例如路径设为/graphql/sandbox,关闭该路由的AAD鉴权规则,允许所有未认证用户访问,这个路由仅用来返回嵌入的沙箱页面,不处理实际的GraphQL查询请求。
    • 保留原有业务路由:例如路径设为/graphql,保持原有AAD访问管控逻辑,所有未携带有效鉴权头的请求直接返回401,专门处理实际的GraphQL业务请求。
  • 调整沙箱路由对应的Apollo Server插件配置
    给ApolloServerPluginLandingPageLocalDefault的embed参数传入详细配置,指定沙箱发起请求的目标为鉴权的业务路由,同时开启请求头编辑能力,方便用户填入AAD颁发的Bearer令牌,参考配置如下:
const sandboxServer = new ApolloServer({
  schema, // 可复用原有schema,不影响逻辑
  plugins: [
    ApolloServerPluginLandingPageLocalDefault({
      embed: {
        // 指定实际处理请求的鉴权GraphQL端点
        endpoint: "https://<你的Function App域名>/graphql",
        // 沙箱默认展示请求头编辑区域
        initialState: {
          headers: {
            Authorization: "Bearer <替换为你的AAD访问令牌>"
          }
        }
      }
    })
  ]
});

// 沙箱路由单独导出handler,配置对应CORS规则
export const sandboxHandler = sandboxServer.createHandler({
  cors: {
    origin: "*",
    allowedHeaders: ["Content-Type", "Authorization"]
  }
});
  • 调整Function鉴权与CORS配置
    在Azure Function配置中,将/graphql/sandbox路由的鉴权级别设为匿名,将/graphql路由绑定AAD鉴权规则;同时给/graphql路由配置CORS规则,允许沙箱所在域名的跨域请求(同域部署时可省略该步骤),确保带Authorization头的请求不会被拦截。

配置完成后,用户可直接匿名访问沙箱地址,打开沙箱后填入有效AAD令牌即可正常发起鉴权请求,不会出现沙箱静态资源被AAD拦截的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:16:01