Skip to content

Building Interactive Authorization on top of first party apps draft#736

Open
mickrau wants to merge 8 commits into
mainfrom
719-revisiting-building-iae-on-top-of-first-party-apps-draft
Open

Building Interactive Authorization on top of first party apps draft#736
mickrau wants to merge 8 commits into
mainfrom
719-revisiting-building-iae-on-top-of-first-party-apps-draft

Conversation

@mickrau

@mickrau mickrau commented May 4, 2026

Copy link
Copy Markdown
Contributor

rough draft for further discussion.

Changes (among others):

  • change Interactive Authorization Endpoint to Interactive Authorization using Authorization Challenge Endpoint
  • remove status = (require_interactionok) and use (HTTP 401 with error: insufficient_authorization) and (HTTP 200 + authorization_code) instead

I kept the order of the sections so that you can see at a glance what has changed.

@mickrau mickrau requested review from GarethCOliver and fkj May 4, 2026 12:44
@mickrau mickrau linked an issue May 4, 2026 that may be closed by this pull request

@fkj fkj left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Generally I think this is really nice! It does not feel like a hack, but quite natural. I also think it reads pretty well. I've added a lot of nits and some points for discussion.
@mickrau It would be great if you could take a look and merge the ones you agree with/discard the ones you don't. Sorry it took me so long to review this!

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
mickrau and others added 2 commits May 18, 2026 16:53
Co-authored-by: Frederik Krogsdal Jacobsen <fkj@users.noreply.github.com>
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
@mickrau mickrau marked this pull request as ready for review May 22, 2026 13:38
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated

This is an extension of the traditional Authorization Endpoint defined in [@!RFC6749], enabling complex authentication and authorization flows where interaction occurs directly with the Wallet rather than being intermediated by a browser.
This section defines a profile for the OAuth 2.0 for First-Party Applications specification [@!I-D.ietf-oauth-first-party-apps], enabling complex authentication and authorization flows where interaction occurs directly with the Wallet rather than being intermediated by a browser.
A primary use case is requiring the Presentation of a Credential as a prerequisite for issuing a new Credential.

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.

I think the first section should mention that this profile is not a "first party" use case, but in the third party context.

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.

The profile should have a short summary of the additions/changes over vanilla FiPA:

  • third party context
  • adding interaction_types negotiation
  • registering two interaction types: openID4VP & redirect_to_web
  • allowing for custom interaction types

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Suggested change
A primary use case is requiring the Presentation of a Credential as a prerequisite for issuing a new Credential.
A primary use case is requiring the Presentation of a Credential as a prerequisite for issuing a new Credential.
This profile introduces an interaction type negotiation mechanism and registers two initial interaction types: one enabling credential presentation, and another allowing the authorization flow to continue within a browser. This profile is also extensible, permitting the introduction of custom interaction types.
Interactive Authorization typically involves a third-party scenario where the Wallet Provider and the Authorization Server are distinct entities. Consequently, the trust mechanisms specified in this specification and in [@!OpenID4VP] SHOULD be established to mitigate security and privacy risks.

@paulbastian what about this?

### Interaction Required Response {#iae-interaction-required-response}

By setting `status` to `require_interaction` in the response, the Authorization Server requests an additional user interaction.
By setting `error_code` to `insufficient_authorization` in the response with HTTP response code 401 `Unauthorized`, the Authorization Server requests an additional user interaction.

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.

HTTP 401 differs from FiPA

Suggested change
By setting `error_code` to `insufficient_authorization` in the response with HTTP response code 401 `Unauthorized`, the Authorization Server requests an additional user interaction.
By setting `error_code` to `insufficient_authorization` in the response with HTTP response code 400 `Bad Request`, the Authorization Server requests an additional user interaction.

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.

wg call:

  • http 401 could make sense to differentiate real errors (400) from insufficient authorization (401)
  • should be raised to FiPA

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I would also prefer 401, as used in the example B.2 in FiPA

here the related FiPA issue, raised by @paulbastian


```
HTTP/1.1 200 OK
HTTP/1.1 401 Unauthorized

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.

Suggested change
HTTP/1.1 401 Unauthorized
HTTP/1.1 400 Bad Request


```
HTTP/1.1 200 OK
HTTP/1.1 401 Unauthorized

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.

Suggested change
HTTP/1.1 401 Unauthorized
HTTP/1.1 400 Bad Request

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
| **endpoint** | `interactive_authorization_endpoint` parameter in AS Metadata | `authorization_challenge_endpoint` parameter in AS Metadata | |
| **requests** | (Initial and Follow-Up) Interactive Authorization Request | Authorization Challenge Request, Intermediate Requests are out of scope and must be defined by profile, `authorization_challenge_endpoint` can be reused) | How to specify intermediate requests? IAE distinguishes Follow-up by the presence of `auth_session`, whereas in FPA, `auth_session` can also be present in the initial request. |
| **responses** | Interaction Required Response, Authorization Code Response, Interactive Authorization Error Response | Authorization Code Response, Error Response (includes requests for more information) | |
| **scope** | implementation ready specification that defines two interaction types (`urn:openid:dcp:iae:openid4vp_presentation`, `urn:openid:dcp:iae:redirect_to_web`) | defines basic mechanics + `redirect_to_web` option. In order to successfully implement this specification, the Authorization Server will need to define its own specific profile

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I'd like to recommend that redirect_to_web be renamed to method_via_web. This separates the behavior of this profile from the redirect_to_web behavior defined in FiPA as the two are semantically different.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I agree. We should define "our own" version of redirect_to_web. Note that this table is more of an overview made as preparatory work.

In the actual text, the interaction type is currently named urn:openid:dcp:ia:redirect_to_web, but we might want to rename it to make the separation clearer.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

i have no strong opinion on whether to use urn:openid:dcp:ia:redirect_to_web or urn:openid:dcp:ia:method_via_web. If there was consensus/no objection during the call, I can gladly change it.

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md
#### Redirect to Web {#ia-redirect-to-web}

If the type is `urn:openid:dcp:iae:redirect_to_web`, the Authorization Server is indicating that the authorization process must continue via interactions with the user in a web browser.
If the type is `urn:openid:dcp:ia:redirect_to_web`, the Authorization Server is indicating that the authorization process must continue via interactions with the user in a web browser. This is used as a step in the interactive authorization process, while Section 5.2.2.1.1 of [@!I-D.ietf-oauth-first-party-apps] is a fallback to traditional authorization that replaces the entirety of the Interactive Authorization process.

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.

@gffletch suggesting to change "redirect_to_web" to something else to make it more different from FiPA

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md
Co-authored-by: Judith <59833642+ju-cu@users.noreply.github.com>
Co-authored-by: Paul Bastian <paul.bastian@posteo.de>
Co-authored-by: Micha Kraus <7931215+mickrau@users.noreply.github.com>
@mickrau

mickrau commented Jun 11, 2026

Copy link
Copy Markdown
Contributor Author

Thank you for the feedback. I have resolved most of the suggestions. Aside from a few editorial todos, there are two open questions left to address:

  • Naming Convention: Should we rename urn:openid:dcp:ia:redirect_to_web to urn:openid:dcp:ia:method_via_web?
  • Error Handling: Should we stay with HTTP 401 (as used in FiPA example) or switch to HTTP 400 (as used in FiPA normative text)?

@fkj

fkj commented Jun 12, 2026

Copy link
Copy Markdown
Member
  • Naming Convention: Should we rename urn:openid:dcp:ia:redirect_to_web to urn:openid:dcp:ia:method_via_web?

I think yes, since people might forget about the URN prefix and think it's the same thing. A completely different name avoids confusion.

  • Error Handling: Should we stay with HTTP 401 (as used in FiPA example) or switch to HTTP 400 (as used in FiPA normative text)?

I think 401 makes more sense when considering the HTTP semantics.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

revisiting building IAE on top of first party apps draft

6 participants