Visual RFC.
ALL RFCs / RFC 8707
Read the RFC ↗
RFC 8707 / REQUEST A TOKEN FOR ITS TARGET

Separate permissions from destinations

04

Requesting two scopes for two resources asks for each scope at each resource. It does not describe a different private scope list for each destination.

RFC 8707 · § 2.2EXAMPLE
4 / 4
Separate permissions from destinationsTwo requested resources calendar and contacts crossed with read and write scopes produce four requested combinations. A separate rejection stops at server policy and returns invalid_target without a token. An alternative single-calendar request with read write is downscoped to read, then the response explicitly reports scope read because it changed. Matrix cells are requests, not granted authority.Scope × resources · a request, not a grantresource=https://cal.example/scope=read%20writechosen policy: read onlyread: grantedwrite: absentMUST report changed scope{"access_token":"A-read", "token_type":"Bearer","scope":"read"}
04
Tell the client which permission was granted.

The response includes scope=read because it differs from read write. Omitting that change would violate the base OAuth response requirement.

Source for this drawing: RFC 8707 · Read RFC section 2.2 ↗

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

Two scopes and two resources describe four requested combinations.

  • The request semantics are the cartesian product: all requested scopes at all requested target services. The server may be unable or unwilling to fulfill that combination and can return invalid_target.
  • To the extent possible, the server should downscope each token to permissions the respective resource can process and needs to know. This limits unnecessary cross-service disclosure; the RFC states this in lowercase should.
  • When the issued scope differs from the requested scope, the server MUST include the effective scope in the response under RFC6749 §§3.3/5.1. A narrowed scope is not hidden from the client.
DETAILS

The matrix is a request, not proof of consent or a granted privilege. Separate branches show a rejected two-resource combination and a successful single-resource/read-only result under a chosen policy. The refresh token and other grant rules still bound the available authorization.

Read the RFC section ↗

All chapters in RFC 8707

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 ↗