Для начала я скажу, что есть еще одна опция, это токен полосы авторизации в самом шлюзе API, и, если необходимо, разветвите заголовок с пользовательским контекстом и передайте его в нисходящий поток. Мы склонны делать это, поскольку мы рассматриваем любую службу, к которой вы получаете доступ после шлюза API в часть нашей защищенной зоны. мы помещаем все наши защиты перед или в шлюзе API. Это позволяет сервису свободно общаться друг с другом. Однако мы также теряем здесь немного авторизации. Если вы можете жить с этим, то это работает лучше всего, так как уменьшает некоторые накладные расходы, и это то, что я склонен использовать чаще всего.
Однако до этого я использовал для получения токена JWT из пользовательского интерфейса, и он был проверен нашим уровнем узла (BFF) и, в свою очередь, обменивался на то, что мы использовали для вызова токена доступа к узлу. По сути, у нас есть пользователь на уровне узла, для которого мы использовали этот токен и генерировали его. Этот токен имеет авторизацию практически для всего (что происходило постепенно, и в итоге мы отказываемся от авторизации для последующих сервисов)
Это помогло нам, потому что мы могли гарантировать, что маркер доступа пользователя мало используется для наших нисходящих сервисов, и если будет сделан вызов для нисходящего потока непосредственно с токеном пользователя, он будет отброшен. Недостатком создания нашего собственного токена было то, что мы в конечном итоге предоставили доступ ко всем службам и всем API-интерфейсам этого токена.
Если вы передадите токен из пользовательского интерфейса в нисходящий поток, то плюсы и минусы несколько перевернуты. Также предоставление правильных ролей пользователю становится затруднительным.