Documentation
¶
Overview ¶
Package edgecredential — ЧЕМ человек звонит, когда его личность передал край (kaname#677).
Зачем ¶
Снятие ключа доступа гасит прочие сессии человека и оставляет текущую (Ф13 Р8). Вызывающий, предъявивший токен нашей церемонии сам, текущую называет выпуском (`callerorigin.CredentialIDFrom`, его кладёт читатель предъявленного). Личность, переданная краем, своей текущей сессии не называла ничем — и снятие гасило ВСЕ сессии, включая ту, из которой ключ сняли. Этот читатель переносит в контекст то, чем текущую называет край:
- номер записи сессии (`MetaSessionID`) — браузерная сессия: край узнаёт его из ответа `InternalHumanSessionService/Resolve` о носителе;
- номер выпуска (`principalwire.MetaTokenJti`) — токен, проверенный краем.
Канал — тот же, что у личности, и решение о доверии — то же ¶
Значения читаются ТОЛЬКО когда общая пара извлечения платформы (`grpcsrv.PrincipalExtractUnary`) признала отправителя вправе говорить за человека: собеседник с проверенным сертификатом из перечня доверенных отправителей (`authn.trusted-forwarder-sans`), на слушателе без TLS — режим разработки, как и для самой личности. Своего решения о доверии здесь нет: второе решение разошлось бы с первым молча. Вердикт пары читается `grpcsrv.TrustedPrincipalFromContext`, а номер записи — не из метаданных, а из носителя фундамента `grpcsrv.TrustedSessionRecordFromContext`: пара извлечения кладёт его тем же решением, и номер, дописанный в метаданные после решения либо при личности, положенной в обход пары, сюда не доезжает (kaname#711).
Сверх доверия — три сужения, каждое на ОДИН факт:
- личность передана, и это человек (`user`): номер записи — понятие сессии человека, у служебной учётки его не бывает;
- личность не названа предъявленным удостоверением: на той полосе выпуск уже положил читатель предъявленного, проверив его сам, и метаданные края его не подменяют;
- значение одно и годной формы (`hss-…` у номера записи); два значения или чужая форма — «не названо», а не догадка, какое из них верное.
Что номер даёт и чего не даёт ¶
Номер записи ничего не аутентифицирует: им нельзя назваться и нельзя продлить сессию. Читателей у него два, и оба читают запись ТОЛЬКО если она — запись самого переданного человека:
- снятие ключа бережёт запись (`access_keys.RevokeInput.ActingSession`);
- вопрос о правах выводит из записи доводы способов и момента условия `mfa_fresh` (`service/session_record_check.go`, kaname#133) — и только когда она жива на момент вопроса.
Поддельный номер, попади он сюда, может лишь не сберечь чью-то запись либо оставить условие без доводов; снять, спасти чужую запись или занять её доводы он не может — личность записи сверяется с доверенной личностью.
Имя ключа ¶
Оба имени — из каталога фундамента (`principalwire`): номер выпуска — `MetaTokenJti`, номер записи — `MetaTokenSessionID` (corelib#97). Край ставит то же имя из того же каталога; второе написание разошлось бы с первым молча. Приставка `x-kacho-token-` — подсемейство контекста проверенного удостоверения, которое край производит сам, снимая клиентские значения пространства до выбора полосы, и пропускает за мост.
Index ¶
Constants ¶
const MetaSessionID = principalwire.MetaTokenSessionID
MetaSessionID — ключ метаданных номера записи сессии человека, который край ставит на каждом запросе, проксируемом за эту сессию. Имя — каталога фундамента, не этого пакета (шапка, «Имя ключа»).
Variables ¶
This section is empty.
Functions ¶
func From ¶
From — контекст с носителями переданного краем удостоверения. Ничего не названо либо отправитель не доверен — контекст возвращается как есть.
func Stream ¶
func Stream() grpc.StreamServerInterceptor
Stream — то же для потоковых вызовов: полоса без читателя при полосе с читателем — различие, которого никто не принимал.
func Unary ¶
func Unary() grpc.UnaryServerInterceptor
Unary — перехватчик публичного слушателя; стоит ПОСЛЕ цепочки личности.
Types ¶
This section is empty.