Documentation
¶
Overview ¶
Package publishedkey — ОДНО правило, по которому читатель токена службы выбирает ключ проверки из её публикуемого набора (задача PRO-Robotech/kaname#396).
Читателей три: читатель предъявленного на публичном слушателе (`presentedcred`), интроспекция для соседей (`handler/tokenintrospecthttp`) и опознание токена доступа церемонии (`ceremonyport`). Разбор каждый строит своими ограничениями — перечень алгоритмов, издатель, получатель, срок, — а ключ выбирают они одним правилом, и живёт оно здесь. До сведения правило было написано трижды, и копии уже разошлись: одна читала испорченный свой ключ набора как негодный токен. Держатель единственности — `TestPublishedKeyRuleHasOneHome` (`internal/check`).
Правило — в порядке ветвей ¶
- форма `kid` — ДО поиска: у читателя предъявленного поиск — повод обновить снимок из хранилища, и негодная форма до него не доезжает;
- ключ по `kid` — поиском вызывающего: у него свой снимок и свои поводы его обновить;
- алгоритм заголовка равен закреплённому за найденным ключом: способ проверки выбирает КЛЮЧ, а заголовок только сверяется;
- параметры заголовка, помеченные обязательными к пониманию (`crit`, RFC 7515 §4.1.11), понятны — иначе отказ всего токена; непомеченные незнакомые игнорируются (правило платформы `tokenpolicy`);
- открытая половина ключа разбирается и её вид — из словаря платформы.
Исходов три — по ТИПУ ¶
- токен принят — подпись найденным ключом сошлась и прочие ограничения разбора вызывающего выполнены;
- отказ — суждение о токене: чужая подпись, ключа нет, ветвь правила не выполнена, ограничение разбора не выполнено;
- ErrUnavailable — опознать не удалось: поиск по набору не ответил либо СВОЙ ключ набора не разбирается. Это наша поломка, а не негодный вход, и смешать её с отказом значило бы учить оператора смотреть не туда.
Index ¶
Constants ¶
This section is empty.
Variables ¶
ErrUnavailable — опознать не удалось: набор не ответил либо свой ключ набора не разбирается. Не суждение о токене.
Functions ¶
Types ¶
type Lookup ¶
type Lookup func(kid string) (domain.PublishedKey, bool, error)
Lookup находит ключ набора по `kid`: (ключ, true, nil) — найден; (_, false, nil) — в наборе его нет, и это суждение; ошибка — спросить набор не удалось, и это третий исход.
func SetLookup ¶
func SetLookup(keys []domain.PublishedKey) Lookup
SetLookup — поиск по уже прочитанному набору.