Visual RFC.
ALL RFCs / RFC 9207
Read the RFC ↗
RFC 9207 / AUTHORIZATION RESPONSE ISSUER

Decode once and compare exact strings

03

Successful and failed comparisons use the actual decoded issuer value, not URL-equivalence guesses.

RFC 9207 · § 2.4EXAMPLE
4 / 4
Decode once and compare exact stringsEach scene holds expected issuer https://as.example/tenant stable. First actual percent-encoded form decodes once to equal strings. Separate trailing-slash, host-case and error-issuer examples differ and stop before grant continuation. Compare literal strings, not normalized URL objects; mismatching errors are not attributed to the intended issuer.Decode the value · compare exact stringsExpected issuer for this transactionhttps://as.example/tenantSeparate error response: error=access_deniedhttps://other.examplesimple string comparison: differentMUST reject · MUST NOT proceedDo not attribute this error to the saved issuer
04
Do not attribute this error to the saved issuer.

Separate error response declares https://other.example. It does not match the retained https://as.example/tenant. Reject the response and do not assume the intended server denied the user’s access.

Source for this drawing: RFC 9207 · Read RFC section 2.4 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

A key is different from permission.

An app, a person, and a server have different roles. Follow who asks, who grants permission, and who checks the credential. A key in the drawing is an analogy, not a literal protocol field.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

KEY POINT

A trailing slash or changed letter is not an exact match.

  • Supporting clients MUST extract present iss, decode application/x-www-form-urlencoded, and use simple string comparison against the expected issuer. With metadata, compare its issuer; otherwise use deployment-specific configuration.
  • If the value differs, clients MUST reject the authorization response and MUST NOT proceed with the authorization grant. Do not normalize away a trailing slash, change case or choose a new token endpoint from the returned value.
  • For mismatching error responses, clients MUST NOT assume the error originated at the intended server. The same comparison is required even though no code is present.
  • Issuer correlation prevents mix-up in its stated threat model. It does not by itself authenticate a user, bind a code to a PKCE verifier or protect a tampered browser response.
DETAILS

This guide compares decoded strings. It does not compare percent-encoded spellings directly or imply that issuer matching alone is cryptographic response integrity.

Read the RFC section ↗

All chapters in RFC 9207

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗