ipinternalpage
GuideUpdated

How to protect static HTML with Google SSO.

If you have a local HTML report and need coworkers to open it securely, internalpage provides the access layer, viewer URL, and update workflow without asking you to deploy an app.

Create a private page from an HTML file
Require Google sign-in before viewing
Use workspace or selected-email access
Update the page without changing the shared link

Before you start: know what Google SSO protects

Google sign-in answers who the viewer is; the page access policy decides whether that identity may receive the HTML. This is different from adding a Google login button to a public static host, where the original file may still be reachable outside the application route.

  • The source file remains private until the viewer passes the configured access check
  • Workspace access is useful for team-wide reports
  • Selected-email access is useful for a smaller review group

Authorized viewers can inspect the HTML delivered to their browser. Never embed credentials, API keys, or secrets in the report source.

Step 1: export one self-contained HTML file

Export the report from your notebook, script, dashboard tool, or agent workflow. A self-contained file is the most predictable option because CSS, images, and scripts do not depend on a separate public asset host.

  • Use .html or .htm for static reports
  • Open the file locally once to confirm that charts and styles render
  • Remove credentials, private tokens, raw customer secrets, and unnecessary personal data
Check the report locally
open ./report.html

Step 2: sign in and publish

Use the dashboard for an occasional report, or use the CLI when a script or recurring workflow generates the file. The first publish creates the page; later publishes to the same slug update it without changing the shared URL.

  • Dashboard publishing works for manual reports
  • CLI publishing works for repeatable scripts and CI
  • A readable slug such as weekly-report makes the destination recognizable
Sign in once
npx @internalpage/cli login
Publish the HTML report
npx @internalpage/cli publish ./report.html --slug weekly-report

Step 3: choose who can open the page

Choose workspace access when every signed-in member should see the report, or grant selected emails when the audience is narrower. Test the final viewer URL from a signed-out browser before distributing it.

  • Unauthenticated viewers go through Google sign-in
  • Unauthorized viewers do not receive the page content
  • The intended Google account can open the report after sign-in

Step 4: update the report without changing its URL

Regenerate the local file and publish it again with the same slug. This replaces the current version behind the existing private link, so teammates do not need a new attachment or bookmark.

  • Keep the slug stable for recurring reports
  • Use a different slug when the report needs a separate audience or lifecycle
  • Review recent view logs when you need to confirm access
Publish the next version
npx @internalpage/cli publish ./report.html --slug weekly-report

When to use a different approach

A private static page is a good fit for read-only output. Use an application platform when the browser needs to write to a database, call a private backend continuously, or support complex interactive sessions.

  • Use Cloudflare Access when you already operate an application or hostname
  • Use a full application host for server-side logic and live data writes
  • Use internalpage when the deliverable is the finished HTML file itself
FAQ

Common questions

Can I do this with Cloudflare Access instead?

Yes, Cloudflare Access is a strong fit when you already have an application or hostname to protect. internalpage is lighter when the thing you need to share is a single generated page or document artifact.

Does Google SSO make the page public?

No. The viewer URL exists on the internet, but page content is served only after the viewer passes the configured access check.

What file types work besides HTML?

internalpage also supports Markdown and OpenAPI files. Markdown is rendered as a readable page, and OpenAPI specs use ReDoc, Swagger UI, or Scalar as private read-only references.

Will publishing the same slug break the shared link?

No. Repeating publish with the same slug updates the existing page while keeping its viewer URL stable.