collective / collective/pas-plugins-identity

OP-side logout: end_session_endpoint and back-channel fan-out

Open
#52 0 comments 0 reactions 1 assignee Claimed by @ericof View on GitHub
enhancement
Dominant language
Python
Stars
1
Forks
0
Avg merge
39m
Merged PRs (30d)
38

Description

## What happens

This site can *receive* a logout and cannot *send* one.

`core/logout.py` implements OIDC Back-Channel Logout as a relying party in full:
token validation, replay refusal by `jti`, per-user keyring rotation, and an
event the `[server]` layer subscribes to in order to revoke refresh tokens.

As an authorization server there is nothing. `server/discovery.py` advertises
authorization, token, userinfo, jwks and revocation endpoints and no
`end_session_endpoint`; `IClientRecords` declares `redirect_uris`,
`grant_types`, `scope`, `service_user`, `secret_hash` and `auth_method`, and no
`backchannel_logout_uri` or `post_logout_redirect_uris`.

## What it should do

Two specifications, best taken in order and possibly as two pull requests.

**RP-Initiated Logout 1.0**
- an `end_session_endpoint`
- `post_logout_redirect_uris` on `IClientRecords`
- `id_token_hint` validation

**Back-Channel Logout 1.0, as the provider**
- `backchannel_logout_uri` per client
- a signed logout token per registered client
- a fan-out that tolerates a client being down

Both advertised in `server/discovery.py`.

## Notes

The receiving half is the reference for the token shape, and its notes on
`plone.session`'s `per_user_keyring` apply unchanged — a site that wants this
has to turn that on.

Stays in `server/`; `make check-imports` forbids core importing it.

How much of this lands before 1.0.0 final is an open decision (Érico,
2026-09-08: postponed).

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.