Skip to content

v3.3: First pass at explaining SAFs - #5447

Merged
lornajane merged 8 commits into
OAI:v3.3-devfrom
handrews:safs
Oct 22, 2026
Merged

lornajane merged 8 commits into
OAI:v3.3-devfrom
handrews:safs

Conversation

@handrews

@handrews handrews commented Jul 25, 2026 •

Copy link
Copy Markdown
Member

This PR is to get conversation started on how we want to explain SAFs in the OAS. I'm not particularly attached to it, but as we get the SIG/SAF repositories up and running, we should figure out how to explain this to readers.

  • schema changes are included in this pull request

3huss99-ui
3huss99-ui previously approved these changes Jul 25, 2026
@karenetheridge
karenetheridge dismissed 3huss99-ui’s stale review July 26, 2026 01:50

This user appears to be farming participation events, possibly for future spamming or attempts to inject vulnerabilities into tooling or content.

@handrews
handrews marked this pull request as ready for review August 9, 2026 19:34
@handrews
handrews requested review from a team as code owners August 9, 2026 19:34
@handrews

handrews commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

Clean rebase force-push, no changes to commits. This is ready for review.

miqui
miqui previously approved these changes Aug 11, 2026

@miqui miqui 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.

looks good to me. Perhaps a few more examples?

Comment thread src/oas.md Outdated
@miqui

miqui commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

@handrews looks good. Can we add another example using more than one SAF?

usingFeatures:
  legacySecurity: 3.3.0
  lifeCycle: 1.0.0
$self: https://example.com/openapi
info:
  title: Example Pet Store App

@miqui

miqui commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

btw, i am open to other names for the life cycle SAF.

@handrews

handrews commented Oct 7, 2026

Copy link
Copy Markdown
Member Author

@miqui we need to figure out whether we're going to really do feature-level SAFs (as we originally decided) or specification-level SAFs (which would make the versioning story substantially easier; we could always go more complex later if there is demand.

Here's examples of it both ways (the exact SAF/specification names are unimportant right now).

The way we originally decided (rar is both OAuth Rich Authorization Requests and GNAP's Resource Access Rights — they were developed together with the same structure and acronym on purpose):

usingFeatures:
  legacySecurity: 3.3.0  # SIG-security, migrated from the OAS
  rar: 1.0.0             # SIG-security, enhancement to Security Requirements
  deprecation: 1.0.0.    # SIG-lifecycle
  sunset: 1.0.0          # SIG-lifecycle

Simplified: the version number is the version of the SIG specification, and you use the specification all-or-nothing.

usingFeatures:
  security: 1.0.0  # Includes legacy, RAR, anything else we add
  lifecycle: 1.0.0 # Includes sunset, deprecation, and anything else we add

@handrews

handrews commented Oct 7, 2026

Copy link
Copy Markdown
Member Author

Rebased the original commit unchanged and added a new commit in response to comments above.

@miqui

miqui commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Thanks @handrews for your feedback. I am going to nudge @ralfhandl to finish his review.

Comment thread src/oas.md Outdated
Comment thread src/oas.md Outdated
@SensibleWood

Copy link
Copy Markdown

@miqui we need to figure out whether we're going to really do feature-level SAFs (as we originally decided) or specification-level SAFs (which would make the versioning story substantially easier; we could always go more complex later if there is demand.

Here's examples of it both ways (the exact SAF/specification names are unimportant right now).

The way we originally decided (rar is both OAuth Rich Authorization Requests and GNAP's Resource Access Rights — they were developed together with the same structure and acronym on purpose):

usingFeatures:
  legacySecurity: 3.3.0  # SIG-security, migrated from the OAS
  rar: 1.0.0             # SIG-security, enhancement to Security Requirements
  deprecation: 1.0.0.    # SIG-lifecycle
  sunset: 1.0.0          # SIG-lifecycle

Simplified: the version number is the version of the SIG specification, and you use the specification all-or-nothing.

usingFeatures:
  security: 1.0.0  # Includes legacy, RAR, anything else we add
  lifecycle: 1.0.0 # Includes sunset, deprecation, and anything else we add

@handrews my opinion on this is that the simplified version is the best match for how the discussion has evolved. My gut reaction on seeing rar as a feature is that this is too granular, and will take a lot of composition to manifest a bunch of features correctly.

Also rar doesn't really make sense on its own, as it should be considered in the context of something that implements it i.e. GNAP, OAuth, etc. It needs to be part of the wider security SAF to give it the right context i.e. this is used by a GNAP Object (however that manifests itself), this is used by an OAuth Profile Object, etc.

You could of course compose these relationships at a feature level, but then that requires a bunch of scaffolding that might be hard to maintain. Also humans would "probably" understand this stuff better as part of a larger "whole".

Comment thread src/schemas/validation/schema.yaml
Comment thread src/oas.md
@baywet

baywet commented Oct 8, 2026

Copy link
Copy Markdown
Member

Collecting some notes from the meeting

There's a general agreement that we should do SAF level entries, as opposed of feature level entries to reduce the overhead in terms of publishing etc...

So something closer to this to take the earlier examples

usingFeatures:
  security: 1.0.0  # Includes legacy, RAR, anything else we add
  lifecycle: 1.0.0 # Includes sunset, deprecation, and anything else we add

Additionally: we need to review the name usingFeatures to have a more explicit name.

And more people should review this pull request :)

Comment thread src/oas.md Outdated
Comment thread src/schemas/validation/schema.yaml
Comment thread src/oas.md Outdated
Comment thread src/oas.md Outdated
Comment thread src/schemas/validation/schema.yaml Outdated
Comment thread src/schemas/validation/schema.yaml Outdated
Comment thread tests/schema/pass/info-object-example.yaml Outdated
miqui
miqui previously approved these changes Oct 22, 2026

@miqui miqui 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.

pending a few nits...looks good to me as a first pass.

Paragraph rewrite by Lorna.

Co-Authored-By: Lorna Jane Mitchell <lorna@lornajane.net>

@mikekistler mikekistler 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.

Looks good. 👍

@lornajane
lornajane dismissed karenetheridge’s stale review October 22, 2026 16:47

Changes were applied

@lornajane
lornajane merged commit 9e5a9c2 into OAI:v3.3-dev Oct 22, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants