{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Waves' Blog",
  "description": "Security Blog",
  "home_page_url": "https://blog.wavespro.net/",
  "feed_url": "https://blog.wavespro.net/feed.json",
  "language": "zh",
  "authors": [
    {
      "name": "Waves"
    }
  ],
  "items": [
    {
      "id": "https://blog.wavespro.net/posts/keyless-deploy-with-oidc",
      "url": "https://blog.wavespro.net/posts/keyless-deploy-with-oidc",
      "title": "GitHub Actions 无密钥部署 Azure：OIDC 联合身份的原理",
      "content_text": "这个博客部署到 Azure Static Web Apps 时如何做到 GitHub 端零长效 secret：从 Entra ID 的 workload identity、federated credential 四要素，到 OIDC Discovery 验签、双层 token 与信任边界。",
      "date_published": "2026-07-03T00:00:00.000Z",
      "date_modified": "2026-07-03T00:00:00.000Z",
      "tags": [
        "security",
        "azure",
        "oidc",
        "ci-cd"
      ]
    },
    {
      "id": "https://blog.wavespro.net/posts/view-transitions-and-islands",
      "url": "https://blog.wavespro.net/posts/view-transitions-and-islands",
      "title": "View Transitions × Astro Islands：丝滑切页与性能预算",
      "content_text": "用浏览器原生 View Transitions API 做跨页动画，配合 Astro Islands 把交互成本压在岛屿内，最终守住 0 JS 默认与首屏 < 50KB 的预算。",
      "date_published": "2026-06-28T00:00:00.000Z",
      "date_modified": "2026-06-28T00:00:00.000Z",
      "tags": [
        "astro",
        "performance",
        "ux"
      ]
    },
    {
      "id": "https://blog.wavespro.net/posts/strict-csp-on-static-hosting",
      "url": "https://blog.wavespro.net/posts/strict-csp-on-static-hosting",
      "title": "静态托管上的严格 CSP：踩过的坑与最终方案",
      "content_text": "在 Azure Static Web Apps 上落地 script-src 'self'，放弃 per-request nonce，权衡 Trusted Types 与 Pagefind，并把所有响应头收进 staticwebapp.config.json。",
      "date_published": "2026-06-24T00:00:00.000Z",
      "date_modified": "2026-06-24T00:00:00.000Z",
      "tags": [
        "security",
        "csp",
        "azure"
      ]
    },
    {
      "id": "https://blog.wavespro.net/posts/hello-astro",
      "url": "https://blog.wavespro.net/posts/hello-astro",
      "title": "为什么用 Astro 5 搭这个博客",
      "content_text": "记录这个双语技术博客的技术选型：Astro 5 Islands、零 JS 默认、Tailwind v4 CSS-first，以及为什么不选 Next 或纯静态生成器。",
      "date_published": "2026-06-20T00:00:00.000Z",
      "date_modified": "2026-06-20T00:00:00.000Z",
      "tags": [
        "astro",
        "meta",
        "frontend"
      ]
    }
  ]
}