facetted-interfaces/history/FIAM_v0.2_Draft6/specimens/regression/07-oidc-authorization-code-flow.yaml
tegwick 1353267569 Establish FIAM repository governance baseline
Assistant: codex
Assistant-Model: gpt-5.6-luna
Assistant-Session: 01a087b0-7b1e-7531-8ef3-6525ebaf7ee7
2026-09-09 21:53:43 +02:00

173 lines
5 KiB
YAML

fiam_version: '0.2'
instance:
id: specimen.oidc.authorization-code
kind: specimen
title: OIDC Authorization Code Flow
status: provisional
intent: Exercise multi-party choreography, browser-mediated redirects, token exchange, and layered identity semantics.
nodes:
- id: node.user-agent
kind: system-node
name: Browser
node_type: fiam.node-type.user-agent
- id: node.relying-party
kind: system-node
name: Relying Party
node_type: fiam.node-type.application
- id: node.authorization-server
kind: system-node
name: OpenID Provider
node_type: fiam.node-type.identity-provider
ports:
- id: port.rp.authn
owner: node.relying-party
participations:
- contract: contract.oidc
mode: requires
roles:
- fiam.role.oidc-client
- id: port.op.authorization
owner: node.authorization-server
participations:
- contract: contract.oidc
mode: offers
roles:
- fiam.role.authorization-server
- id: port.op.token
owner: node.authorization-server
participations:
- contract: contract.oidc
mode: offers
roles:
- fiam.role.token-issuer
contracts:
- id: contract.oidc
kind: interface-contract
purpose:
- fiam.purpose.authentication
- fiam.purpose.identity-federation
contract_forms:
- fiam.contract-form.oidc
operations:
- id: operation.authorization-request
name: authorization request
interaction_style: fiam.interaction-style.redirect-request
- id: operation.authorization-response
name: authorization response
interaction_style: fiam.interaction-style.redirect-response
- id: operation.token-request
name: token request
interaction_style: fiam.interaction-style.request-response
endpoints:
- id: endpoint.authorization
kind: endpoint
address: https://idp.example.test/authorize
address_scheme: fiam.address-scheme.https-url
- id: endpoint.token
kind: endpoint
address: https://idp.example.test/token
address_scheme: fiam.address-scheme.https-url
bindings:
- id: binding.oidc.authorization-https
contract: contract.oidc
provider_port: port.op.authorization
consumer_ports:
- port.rp.authn
operations:
- operation.authorization-request
- operation.authorization-response
binding_profile: fiam.binding-profile.oidc-http
communication_stack:
- role: fiam.stack-role.identity-protocol
term: fiam.protocol.openid-connect
- role: fiam.stack-role.authorization-framework
term: fiam.protocol.oauth2
- role: fiam.stack-role.application-transfer-protocol
term: fiam.protocol.http
- role: fiam.stack-role.security-protocol
term: fiam.protocol.tls
- role: fiam.stack-role.transport
term: fiam.transport.tcp
endpoints:
- endpoint.authorization
- id: binding.oidc.token-https
contract: contract.oidc
provider_port: port.op.token
consumer_ports:
- port.rp.authn
operations:
- operation.token-request
binding_profile: fiam.binding-profile.oidc-http
communication_stack:
- role: fiam.stack-role.identity-protocol
term: fiam.protocol.openid-connect
- role: fiam.stack-role.authorization-framework
term: fiam.protocol.oauth2
- role: fiam.stack-role.application-transfer-protocol
term: fiam.protocol.http
- role: fiam.stack-role.security-protocol
term: fiam.protocol.tls
- role: fiam.stack-role.transport
term: fiam.transport.tcp
endpoints:
- endpoint.token
interaction_flows:
- id: flow.oidc.authorization-code
kind: interaction-flow
flow_type: fiam.flow.authentication-choreography
participants:
- node.user-agent
- node.relying-party
- node.authorization-server
steps:
- sequence: 1
operation: operation.authorization-request
binding: binding.oidc.authorization-https
from: node.relying-party
via: node.user-agent
to: node.authorization-server
- sequence: 2
operation: operation.authorization-response
binding: binding.oidc.authorization-https
from: node.authorization-server
via: node.user-agent
to: node.relying-party
- sequence: 3
operation: operation.token-request
binding: binding.oidc.token-https
from: node.relying-party
to: node.authorization-server
security:
- id: security.oidc
applies_to: flow.oidc.authorization-code
authentication: fiam.security.authentication.federated
credential_artifacts:
- fiam.credential.authorization-code
- fiam.credential.id-token
- fiam.credential.access-token
identity_propagation: fiam.security.identity-propagation.token
assertions:
- id: assertion.flow-required
subject: flow.oidc.authorization-code
predicate: fiam.property.multi-party
value: true
evidence:
mode: fiam.evidence.declared
source: OIDC protocol definition
confidence: 1.0
assertion_kind: property
polarity: asserted
tests:
stresses:
- multi-party-choreography
- browser-mediated-flow
- identity-overlay
notes:
- Authentication is modeled as a flow, not collapsed into one endpoint.
expected_properties:
- id: check.evidence
kind: all-assertions-have-evidence
- id: check.no-deprecated
kind: no-deprecated-terms
- id: check.no-legacy-representations
kind: no-legacy-representations