Skip to content

Add illustrated protocols section - #1294

Draft
maartenba wants to merge 12 commits into
mainfrom
mb/add-illustrated-protocols-section
Draft

maartenba wants to merge 12 commits into
mainfrom
mb/add-illustrated-protocols-section

Conversation

@maartenba

@maartenba maartenba commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

What are we adding?

OAuth and OpenID Connect are easy to use and hard to picture. Who redirects whom? Which token goes where? What does the API actually check?

To address that, we've added a new section to the Duende docs: Protocols: Identity Visualized. It brings illustrated walkthroughs covering OAuth 2.x, OpenID Connect, DPoP, PAR, SAML and passkeys.

Each page shows the flow as an interactive diagram you can step through. Every step comes with:

  • the HTTP message on the wire
  • what to look at, and why it matters
  • a link to the section of the spec it comes from

We also say where it gets subtle: why revoking a token isn't the same as logging out, what PKCE does and doesn't protect, and why a valid token isn't the same as permission.

image

The diagrams also appear in our product docs where they help. Next to the IdentityServer configuration for PAR, DPoP or SAML, you can see what happens on the wire.

image

Reviewer focus

Structure, code, ...

@khalidabuhakmeh @ProgrammerAL Can you try running things locally, and provide feedback on structure when running this, look through code, ...? Very open to making changes here.

Content

@josephdecock @wcabus (and @khalidabuhakmeh @ProgrammerAL if you like), please review added content (mostly in /protocols. I'd value your take on accuracy and on whether they teach well.

A few that deserve some attention:

  • OIDC nonce: we say the RP checks the nonce only if it sent one (Core 3.1.3.7). Should we instead tell readers to always send one, or is "optional in the code flow" the right message?
    /protocols/openid-connect/openid-connect/, step 5
  • Refresh token reuse: after a stolen refresh token is detected, we say the client needs a new authorization grant, not that the user must sign in again. Is that the right framing?
    /protocols/oauth-2x-core/refresh-tokens/, steps 5 and 7
  • SAML signing: we say a signed Response can protect its assertions (Errata 05, E26). Should we recommend signing the assertion itself, since that's what IdentityServer does by default and many SPs expect?
    /protocols/saml-ws-fed/saml-sso/, step 4 and Notes
  • Introspection: we say active: false covers revoked, expired and unknown tokens, so it isn't a revocation flag. Is that clear enough, and is the example API's policy (require aud, exp and scope) good advice?
    /protocols/tokens/introspection/, steps 3 and 5, and /protocols/tokens/token-revocation/, steps 5 and 7
  • PKCE: we say a matching verifier ties the token request to the authorization request, but doesn't authenticate a public client. Is that the right line to draw for learners?
    /protocols/oauth-2x-core/pkce/, step 6
  • Scopes: there's no consent step, because consent isn't a protocol mechanism. Do learners need one anyway, since IdentityServer has a consent screen?
    /protocols/oauth-2x-core/scopes/, step 2 and Notes
  • Failure paths: these are numbered steps titled "If ..." or "Alternative: ...". Does that read clearly, or would you rather see failures outside the numbered flow?
    For example /protocols/oauth-2x-core/client-credentials/, steps 5 to 7, and /protocols/oauth-2x-core/scopes/, steps 6 and 7
  • In general, do the page titles work for you? You can see them all on /protocols/.

There are a few drafts in this PR as well, let's keep those out of scope for now.

Twenty illustrated, step-by-step explainers of OAuth 2.x, OpenID Connect,
DPoP, PAR, SAML and passkeys under /protocols/, grouped with _meta.yml.

- Flow, Cite and Sources components, with a spec registry for citations
- Monthly spec check script and workflow (schedule disabled for now)
- README authoring guidance for protocol pages
- Home page section and resources chip
- Embedded flows on product pages where they add a picture
- Glossary and terminology links to the protocol pages
- Five pages renamed .md to .mdx for embeds (URLs unchanged)
- Key management: move the discovery flow after the options example, with a client-side lead-in
- API scopes: move the scopes flow after the scope authorization section
- Clients: add a lead-in sentence before the PKCE flow
@maartenba maartenba self-assigned this Oct 28, 2026
@maartenba maartenba added the preview Spins up a preview of the Pull Request for review label Oct 28, 2026
Copilot AI balanced review requested due to automatic review settings October 28, 2026 15:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The purported offline validation can pass despite registry drift, and the token walkthrough incorrectly retains discarded tokens in its displayed holdings.

3 open issues
1 file not reviewed
  • astro/package-lock.json: Generated file
What changed in this PR

Adds “Protocols: Identity Visualized,” an illustrated learning section with interactive protocol walkthroughs, specification citations, and links to existing product documentation.

Changes:

  • Add protocol explainers, specification registries, and validated flow data.
  • Introduce reusable walkthrough and citation components, integrated with navigation and the homepage.
  • Embed walkthroughs in product documentation, repair internal links, and add specification-monitoring commands and a manual workflow.

This pull request requires changes. Unresolved issues affect offline validation, token-holdings state, accessible message routes, keyboard flow selection, multi-audience token guidance, and logout/revocation guidance. A homepage grammar and style nit also remains.

File Description
README.md Update writing and protocol-authoring guidance.
astro/​src/​utils/​breadcrumbs.ts Add the Protocols breadcrumb label.
astro/​src/​lib/​protocols/​schema.ts Validate specification records and flow data.
astro/​src/​lib/​protocols/​cite.ts Resolve specification citation keys.
astro/​src/​content/​specs/​webauthn-3.yaml Register WebAuthn references.
astro/​src/​content/​specs/​saml-v2.0-errata05.yaml Register SAML errata references.
astro/​src/​content/​specs/​saml-sec-consider-2.0-os.yaml Register SAML security references.
astro/​src/​content/​specs/​saml-profiles-2.0-os.yaml Register SAML profile references.
astro/​src/​content/​specs/​saml-metadata-2.0-os.yaml Register SAML metadata references.
astro/​src/​content/​specs/​saml-core-2.0-os.yaml Register SAML core references.
astro/​src/​content/​specs/​saml-bindings-2.0-os.yaml Register SAML binding references.
astro/​src/​content/​specs/​rfc9700.yaml Register OAuth security guidance.
astro/​src/​content/​specs/​rfc9449.yaml Register DPoP references.
astro/​src/​content/​specs/​rfc9207.yaml Register issuer-identification references.
astro/​src/​content/​specs/​rfc9126.yaml Register PAR references.
astro/​src/​content/​specs/​rfc9068.yaml Register JWT access-token profile references.
astro/​src/​content/​specs/​rfc8725.yaml Register JWT security guidance.
astro/​src/​content/​specs/​rfc8707.yaml Register resource-indicator references.
astro/​src/​content/​specs/​rfc8628.yaml Register device-grant references.
astro/​src/​content/​specs/​rfc8414.yaml Register authorization-server metadata references.
astro/​src/​content/​specs/​rfc8252.yaml Register native-app OAuth guidance.
astro/​src/​content/​specs/​rfc7662.yaml Register token-introspection references.
astro/​src/​content/​specs/​rfc7636.yaml Register PKCE references.
astro/​src/​content/​specs/​rfc7519.yaml Register JWT claim references.
astro/​src/​content/​specs/​rfc7518.yaml Register cryptographic-algorithm references.
astro/​src/​content/​specs/​rfc7517.yaml Register JWK references.
astro/​src/​content/​specs/​rfc7515.yaml Register JWS references.
astro/​src/​content/​specs/​rfc7009.yaml Register token-revocation references.
astro/​src/​content/​specs/​rfc6750.yaml Register bearer-token references.
astro/​src/​content/​specs/​rfc6749.yaml Register OAuth framework references.
astro/​src/​content/​specs/​openid-connect-session-1-0.yaml Register session-management references.
astro/​src/​content/​specs/​openid-connect-rpinitiated-1-0.yaml Register RP-initiated logout references.
astro/​src/​content/​specs/​openid-connect-frontchannel-1-0.yaml Register front-channel logout references.
astro/​src/​content/​specs/​openid-connect-discovery-1-0.yaml Register discovery references.
astro/​src/​content/​specs/​openid-connect-core-1-0.yaml Register OpenID Connect core references.
astro/​src/​content/​specs/​openid-connect-backchannel-1-0.yaml Register back-channel logout references.
astro/​src/​content/​specs/​draft-ietf-oauth-v2-1-16.yaml Register the OAuth 2.1 draft.
astro/​src/​content/​docs/​protocols/​tokens/​token-revocation.mdx Explain revocation and separate token/session lifetimes.
astro/​src/​content/​docs/​protocols/​tokens/​introspection.mdx Explain introspection responses and API policy checks.
astro/​src/​content/​docs/​protocols/​tokens/​access-token-validation.mdx Explain JWT access-token validation.
astro/​src/​content/​docs/​protocols/​tokens/​_meta.yml Configure the Tokens sidebar group.
astro/​src/​content/​docs/​protocols/​security-hardening/​par.mdx Explain pushed authorization requests.
astro/​src/​content/​docs/​protocols/​security-hardening/​_meta.yml Configure the Security Hardening group.
astro/​src/​content/​docs/​protocols/​saml-ws-fed/​_meta.yml Configure the SAML and WS-Fed group.
astro/​src/​content/​docs/​protocols/​passkeys/​_meta.yml Configure the Passkeys and WebAuthn group.
astro/​src/​content/​docs/​protocols/​openid-connect/​openid-connect.mdx Explain OpenID Connect sign-in.
astro/​src/​content/​docs/​protocols/​openid-connect/​oidc-logout.mdx Explain logout requests and notifications.
astro/​src/​content/​docs/​protocols/​openid-connect/​_meta.yml Configure the OpenID Connect group.
astro/​src/​content/​docs/​protocols/​oauth-2x-core/​refresh-tokens.mdx Explain refresh-token rotation and termination.
astro/​src/​content/​docs/​protocols/​oauth-2x-core/​pkce.mdx Explain authorization code flow with PKCE.
astro/​src/​content/​docs/​protocols/​oauth-2x-core/​device-flow.mdx Explain device authorization and polling.
astro/​src/​content/​docs/​protocols/​oauth-2x-core/​client-credentials.mdx Explain service-to-service token requests.
astro/​src/​content/​docs/​protocols/​oauth-2x-core/​_meta.yml Configure the OAuth Core group.
astro/​src/​content/​docs/​protocols/​index.mdx Add the protocols landing page.
astro/​src/​content/​docs/​protocols/​basics/​which-oauth-flow.mdx Guide OAuth grant selection.
astro/​src/​content/​docs/​protocols/​basics/​token-types.mdx Distinguish token purposes and recipients.
astro/​src/​content/​docs/​protocols/​basics/​oauth-roles.mdx Introduce the four OAuth roles.
astro/​src/​content/​docs/​protocols/​basics/​_meta.yml Configure the Basics group.
astro/​src/​content/​docs/​index.mdx Introduce protocol explainers on the homepage.
astro/​src/​content/​docs/​identityserver/​upgrades/​v7_4-to-v8_0.md Correct PAR links.
astro/​src/​content/​docs/​identityserver/​upgrades/​identityserver4-v4-to-duende-identityserver-v6.md Correct key-management links.
astro/​src/​content/​docs/​identityserver/​upgrades/​identityserver4-to-duende-identityserver-v8.mdx Correct PAR and key-management links.
astro/​src/​content/​docs/​identityserver/​ui/​login/​saml-provider.md Correct the SAML concepts link.
astro/​src/​content/​docs/​identityserver/​tokens/​requesting.md Correct client-configuration links.
astro/​src/​content/​docs/​identityserver/​tokens/​pop.mdx Embed the DPoP walkthrough.
astro/​src/​content/​docs/​identityserver/​tokens/​par.mdx Embed the PAR walkthrough.
astro/​src/​content/​docs/​identityserver/​tokens/​mtls-setup.mdx Correct PAR links.
astro/​src/​content/​docs/​identityserver/​tokens/​jar.mdx Correct PAR links.
astro/​src/​content/​docs/​identityserver/​samples/​basics.mdx Correct the PAR sample link.
astro/​src/​content/​docs/​identityserver/​saml/​index.mdx Correct the SAML concepts link.
astro/​src/​content/​docs/​identityserver/​saml/​endpoints.md Correct concepts and logout links.
astro/​src/​content/​docs/​identityserver/​saml/​configuration.md Correct SAML concepts and key-management links.
astro/​src/​content/​docs/​identityserver/​saml/​concepts.mdx Replace the sequence diagram with an embedded flow.
astro/​src/​content/​docs/​identityserver/​reference/​v8/​options.md Correct the PAR link.
astro/​src/​content/​docs/​identityserver/​reference/​v8/​di.md Correct key-management links.
astro/​src/​content/​docs/​identityserver/​reference/​v7/​options.md Correct the PAR link.
astro/​src/​content/​docs/​identityserver/​reference/​v7/​di.md Correct key-management links.
astro/​src/​content/​docs/​identityserver/​quickstarts/​2-interactive.md Correct the clients link.
astro/​src/​content/​docs/​identityserver/​overview/​terminology.md Link role and token explainers.
astro/​src/​content/​docs/​identityserver/​overview/​packaging.mdx Correct the BFF templates link.
astro/​src/​content/​docs/​identityserver/​overview/​big-picture.mdx Embed the OpenID Connect walkthrough.
astro/​src/​content/​docs/​identityserver/​index.mdx Correct the PAR link.
astro/​src/​content/​docs/​identityserver/​identity/​user-management/​getting-started.mdx Correct the overview link.
astro/​src/​content/​docs/​identityserver/​identity/​user-management/​authentication/​passkeys.mdx Embed passkey registration and sign-in flows.
astro/​src/​content/​docs/​identityserver/​fundamentals/​resources/​index.md Correct the resource-isolation link.
astro/​src/​content/​docs/​identityserver/​fundamentals/​resources/​api-scopes.mdx Embed the scopes walkthrough.
astro/​src/​content/​docs/​identityserver/​fundamentals/​resources/​api-resources.md Correct key-management and isolation links.
astro/​src/​content/​docs/​identityserver/​fundamentals/​key-management.mdx Embed discovery flow and correct storage links.
astro/​src/​content/​docs/​identityserver/​fundamentals/​index.mdx Correct clients and key-management links.
astro/​src/​content/​docs/​identityserver/​fundamentals/​clients.mdx Embed the PKCE walkthrough.
astro/​src/​content/​docs/​identityserver/​deployment/​index.md Correct key-management links.
astro/​src/​content/​docs/​identityserver/​deployment/​high-availability.md Correct the shared-key-store link.
astro/​src/​content/​docs/​identityserver/​data/​providers/​in-memory.md Correct the PAR link.
astro/​src/​content/​docs/​identityserver/​data/​operational.mdx Correct the key-management link.
astro/​src/​content/​docs/​identityserver/​data/​configuration.mdx Correct the clients link.
astro/​src/​content/​docs/​identityserver/​apis/​aspnetcore/​jwt.md Link the JWT validation explainer.
astro/​src/​content/​docs/​identityserver/​apis/​aspnetcore/​confirmation.md Link the DPoP explainer.
astro/​src/​content/​docs/​general/​licensing.md Correct clients and key-management links.
astro/​src/​content/​docs/​general/​glossary.mdx Link relevant protocol explainers.
astro/​src/​content/​docs/​bff/​fundamentals/​session/​management/​logout.md Link the logout explainer.
astro/​src/​content/​docs/​accesstokenmanagement/​advanced/​dpop.md Link the DPoP explainer.
astro/​src/​content.config.ts Register specification content and flow schemas.
astro/​src/​components/​Sources.astro Render grouped specification bibliographies.
astro/​src/​components/​protocols/​FlowFrame.astro Render flow diagrams, cards, and controls.
astro/​src/​components/​protocols/​flow.ts Add interactive stepping and keyboard navigation.
astro/​src/​components/​home/​HomeResources.astro Add the protocols resource link.
astro/​src/​components/​home/​HomeProtocols.astro Render homepage protocol recommendations.
astro/​src/​components/​Flow.astro Support inline and embedded flows.
astro/​src/​components/​Cite.astro Render specification citations.
astro/​package.json Add specification-check commands and a YAML dependency.
astro/​package-lock.json Record the direct YAML dependency.
astro/​astro.config.mjs Add Protocols navigation and LLM grouping.
.github/​workflows/​protocols-monthly.yml Add manually triggered specification monitoring.

Review effort: Balanced

Comment thread .github/workflows/protocols-monthly.yml Resolved
Comment thread astro/src/content/docs/index.mdx Resolved
@maartenba maartenba added this to the 2026-Q4 milestone Oct 28, 2026
- Workflow: run the offline registry check with --local so drift fails the job
- Flow holdings: an entry starting with '-' removes an item, so replaced
  tokens (refresh rotation, JWKS cache, revoked token, ended OP session)
  no longer stay listed
- Home page: fix the protocols heading grammar and Title Case
- Rename 'The Four OAuth Roles' to 'The OAuth Roles' and explain why the
  diagram has three lanes
Copilot AI balanced review requested due to automatic review settings October 28, 2026 15:29
@maartenba maartenba added preview Spins up a preview of the Pull Request for review and removed preview Spins up a preview of the Pull Request for review labels Oct 28, 2026
@DuendeSoftware DuendeSoftware deleted a comment from duende-github-bot Bot Oct 28, 2026
@maartenba
maartenba requested review from ProgrammerAL, josephdecock, khalidabuhakmeh and wcabus and removed request for Copilot October 28, 2026 15:32
@duende-github-bot

Copy link
Copy Markdown

Preview Environment Provisioned

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Unresolved accessibility and keyboard-navigation defects hide arrow direction from screen-reader users at wide layouts and can cause arrow keys to advance a less-visible diagram.

No open issues 🎉

7 previously missed issues

In code that hasn't changed since last review

Medium severity Include arrow direction in accessible step names

astro/​src/​components/​protocols/​FlowFrame.astro:44

At wide diagram sizes, flow.css hides .fl-path with display: none, removing the sender/receiver description from the accessibility tree. The step button and live announcement include only the title, so screen-reader users cannot reliably determine the arrow's direction. Include from and to in the accessible step name so this information remains available at every layout size.

Medium severity Update visibility tracking for accurate keyboard diagram targeting

astro/​src/​components/​protocols/​flow.ts:44

The default observer threshold of 0 leaves stored intersection ratios stale while diagrams remain visible. On pages with two embeds, such as the passkeys page, Left/Right can therefore advance a less-visible diagram and scroll back to it. Observe intermediate thresholds or measure current visibility when choosing the keyboard target.

Low severity Distinguish redirect delivery from client execution environment

astro/​src/​content/​docs/​protocols/​basics/​token-types.mdx:63

Authorization-code exchange keeps tokens out of the authorization redirect, but it does not necessarily keep them out of the browser. The example is a public client, which can be a browser-based SPA; in that case the token response is received in the browser. Distinguish redirect delivery from where the client runs so readers do not infer that code flow alone gives them backend-only token storage.

Low severity Describe token recipients as roles, not a single recipient

astro/​src/​content/​docs/​protocols/​basics/​token-types.mdx:121

A token does not necessarily have exactly one recipient. Access tokens can name multiple resource servers in aud, as the resource-indicators walkthrough explains, and the UserInfo endpoint mentioned below is also a possible recipient. Describe these as recipient roles rather than a single-recipient protocol requirement.

Low severity Avoid claiming ID tokens cannot contain a scope claim

astro/​src/​content/​docs/​protocols/​basics/​token-types.mdx:137

OpenID Connect Core section 2 permits additional ID-token claims, so an ID token can contain a custom scope claim. Its absence is not guaranteed and should not be taught as a distinction between token types. State that Core does not define scope for ID tokens, while keeping the audience and token-type checks as the reasons an API must reject them.

Low severity Qualify blanket statement about refresh tokens after logout

astro/​src/​content/​docs/​protocols/​openid-connect/​oidc-logout.mdx:133

This blanket statement contradicts step 6, which correctly explains that back-channel logout recommends revoking session-associated refresh tokens issued without offline_access. Qualify the statement so readers do not conclude that refresh tokens always survive logout.

Low severity Clarify conditional access-token revocation in introspection example

astro/​src/​content/​docs/​protocols/​tokens/​token-revocation.mdx:93

Step 2 revoked refresh token R7..., but this request introspects access token AT1..., whose revocation is conditional in step 3. Showing active: false without stating that condition can suggest that introspection always detects refresh-token revocation as access-token invalidation. State that this example assumes the AS also revoked AT1, which could otherwise remain active even without caching.

3 resolved since last review
1 file not reviewed
  • astro/package-lock.json: Generated file

Review effort: Balanced

- Flow: include sender and receiver in each step's accessible name and
  live announcement, since the path text is hidden at wide sizes
- Flow: observe several visibility thresholds so arrow keys pick the
  diagram that is most in view
- Token types and PKCE: the code exchange keeps tokens out of redirect
  URLs, not out of the browser for browser-based apps
- Token types: describe recipients as roles, and say Core defines no
  scope claim for ID tokens
- Logout: qualify that back-channel logout may revoke refresh tokens
- Revocation: state that the introspection example assumes AT1 was revoked
@maartenba

Copy link
Copy Markdown
Member Author

Addressed the 7 previously missed issues from the second Copilot review in e9310fb:

  • Accessible step names: each step button and the live announcement now include the sender and receiver (for example "App → Browser · through the browser"), so the direction is available when the path text is hidden at wide sizes.
  • Keyboard targeting: the IntersectionObserver now observes several thresholds, so visibility ratios stay current and Left/Right goes to the diagram most in view.
  • Token delivery (token-types step 2, PKCE step 7): now says the code exchange keeps tokens out of redirect URLs, and that a browser-based app still receives them in the browser.
  • Token recipients (token-types step 6): "exactly one recipient" is now "meant for a different kind of recipient".
  • ID token scope (token-types Notes): now says OpenID Connect Core defines no scope claim for ID tokens.
  • Refresh tokens after logout (oidc-logout Notes): qualified with the back-channel logout rule for tokens issued without offline_access.
  • Introspection example (token-revocation step 5): now states that it assumes the AS also revoked AT1, and that otherwise AT1 stays active until it expires.

Copilot AI balanced review requested due to automatic review settings October 28, 2026 16:24

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human assessment is needed to evaluate unpublished concerns about signature-verification byte consistency and required relying-party origin checks in the passkey walkthrough.

No open issues 🎉

1 file not reviewed
  • astro/package-lock.json: Generated file

Review effort: Balanced

@khalidabuhakmeh

Copy link
Copy Markdown
Contributor

@maartenba

Copy

The copy on some of these pages is "vague" and unsatisfying from a reader's perspective. The first paragraph should answer what folks are looking for, or at least give them a strong grounding in the topic. Many of these opening paragraphs are coy or bury the lead.

For example:

This page helps you pick a grant. After reading it you will know which one fits a user-facing app, a background service, or a device with limited input, and which two to avoid.

"Which two to avoid?! I'm scared now!"

Visualizations

General Feedback

The visualizations are good, but when you click the Details ↓ button, each section should link back to the visualization, which may need another design pass as well.

CleanShot 2026-10-28 at 1 38 43 PM@2x

styling issues on mobile aspect

CleanShot 2026-10-28 at 1 45 03 PM@2x

Now Holding

This section is really confusing to me as it only shows on specific steps. Is the swimlane holding it, am I holding it, is it on the entire request lifecycle?

Build With Duende

This is odd "markety" stuff in a documentation site that doesn't need it. Rename or remove these sections entirely.

Don't Confuse With

This section really jars me. It's like telling our readers to "not think about the pink elephants". I'd rather keep these pages focused on educating readers about the topic; if there is confusion, maybe add an internal link to disambiguate or clarify.

Conclusion

There still needs another pass of polish I believe. I think I would start with one page, refine one of these then apply it across all the pages. It's a good start but one more pass would fix a lot of these issues.

@maartenba maartenba removed the preview Spins up a preview of the Pull Request for review label Oct 28, 2026
Based on review feedback that the copy was vague and read like marketing.

- Open each page with the answer, not a teaser
- Topic-specific headings (Why PKCE Exists, How PKCE Works, PKCE Step by Step)
- Requirement levels move into the step they apply to
- Replace Notes, Use It When, Don't Confuse With and Build with Duende with
  named sections and See Also
- Remove contrast constructions and review language
- PKCE: recommend it for every authorization code flow
- Replace example Basic credentials with a placeholder
- Remove the holds data from flow steps
- Remove the Now holding line
- Add a Back to the diagram button under each step section
- Use Starlight arrow icons in the diagram buttons and embed link
- Find the step section by headings ending in Step by Step
- Fix the control row and card width on narrow screens
- Landing page: state what the section covers and where to start, and drop
  the New to this? card
- README: describe the page structure, heading names and tone
Copilot AI balanced review requested due to automatic review settings October 28, 2026 19:58
@maartenba

maartenba commented Oct 28, 2026 •

Copy link
Copy Markdown
Member Author

@khalidabuhakmeh thanks for the thorough review. Changes are in a4084d3, 1d88696 and ef0b38c.

Copy and tone

  • Every page now opens with the answer, with no teasers. Choose the Right OAuth Flow, for example, opens with the list of which grant to use and which ones to avoid.
  • Headings name the topic, for example "Why PKCE Exists", "How PKCE Works" and "PKCE Step by Step".
  • Requirement levels now sit in the step they apply to, instead of in a Notes section.
  • I removed the "X, not Y" constructions and other review language across all pages.

Sections

  • Build with Duende is gone. Its links are in See Also, and product facts such as RequirePkce are in the text where they apply.
  • Don't Confuse With is gone. Where a distinction matters, it's one sentence with an inline link.

Visualizations

  • Now holding is removed.
  • Each step section has a "Back to the diagram" button that selects that step and scrolls back up.
  • The diagram buttons use the same Starlight arrow icons as the home page.
  • On narrow screens, the control row no longer has a half-drawn background, and the step card uses the full width.

@maartenba maartenba added the preview Spins up a preview of the Pull Request for review label Oct 28, 2026
- The diagram card renders backticked text in step summaries as code
- Mark parameter, claim and error names in all step summaries with backticks,
  as the page prose does
@duende-github-bot

Copy link
Copy Markdown

Preview Environment Provisioned

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Inline flows render incorrectly because schema transformations are discarded, specification retrieval failures can falsely pass the workflow, and passkey guidance misstates required backup-eligibility checks.

3 open issues
1 file not reviewed
  • astro/package-lock.json: Generated file

Review effort: Balanced

Comment thread .github/workflows/protocols-monthly.yml Resolved
Comment thread astro/src/components/Flow.astro Resolved
Copilot AI balanced review requested due to automatic review settings October 28, 2026 20:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The passkey guidance incorrectly makes a required backup-eligibility consistency check conditional on application policy, and the monthly workflow can report success despite specification-fetch failures.

3 open issues
1 file not reviewed
  • astro/package-lock.json: Generated file

Review effort: Balanced

- Flow: use the parsed flow, so string actors are normalized before rendering
- Monthly spec check: exit with an error when a spec can't be fetched
- Passkey sign-in: separate the always-required BS check from the
  policy-dependent BE and BS checks
Copilot AI balanced review requested due to automatic review settings October 28, 2026 20:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human review is needed to assess the security and compatibility implications of the public-client OAuth example omitting required PKCE.

No open issues 🎉

3 resolved since last review
1 file not reviewed
  • astro/package-lock.json: Generated file

Review effort: Balanced

The PKCE page recommends PKCE for every authorization code flow, so the
examples should show it.

- OAuth Roles: code_challenge in the authorization request, code_verifier in
  the token request, and the AS check in step 6
- Scopes: code_challenge and code_verifier in steps 1 and 3
- DPoP: code_verifier in the public client's token request
Copilot AI balanced review requested due to automatic review settings October 29, 2026 05:16

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human assessment is needed for unpublished findings involving an undefined buffer in the passkey signature-verification example and missing search-topic metadata for the new Protocols section.

No open issues 🎉

1 file not reviewed
  • astro/package-lock.json: Generated file

Review effort: Balanced

- Passkey sign-in: hash clientDataJSON in the signature check (cData was
  never defined)
- Search: tag pages under /protocols/ with the Protocols topic
Copilot AI balanced review requested due to automatic review settings October 29, 2026 07:37

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Human assessment is needed to evaluate fragment-navigation synchronization and scrolling gaps, along with missing accessible semantics on the focusable stepper host.

No open issues 🎉

1 file not reviewed
  • astro/package-lock.json: Generated file

Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview Spins up a preview of the Pull Request for review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants