System Out – IT блог про всякое разное
34 subscribers
1 photo
7 links
https://systemout.blog
Разработка, системная архитектура, управление проектами и прочие темы из мира IT.

Здесь я публикую анонсы новых статей в блоге, а также время от времени делюсь ссылками на различные ресурсы, которые показались мне интересными.
Download Telegram
It's alive!

Блог запущен: https://systemout.blog/

Подписывайтесь на этот телеграм канал, где я буду публиковать анонсы новых статей в блоге, а также время от времени делиться ссылками на различные материалы, новости и технологии из мира IT, которые мне покажутся интересными.

Также доступна RSS-лента для отслеживания новых статей в блоге.

А про меня и про сам блог можно почитать в отдельном разделе: https://systemout.blog/about/

Всем добро пожаловать!
System Out – IT блог про всякое разное pinned «It's alive! Блог запущен: https://systemout.blog/ Подписывайтесь на этот телеграм канал, где я буду публиковать анонсы новых статей в блоге, а также время от времени делиться ссылками на различные материалы, новости и технологии из мира IT, которые мне покажутся…»
💡Small Tip:

Если приложение работает с JWT (JSON Web Token), то обычно ему требуется JWT_SECRET для создания/проверки подписи по алгоритму:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
JWT_SECRET
)


Хорошая практика – выносить значение секрета в настройки приложения.
Но ещё лучше – добавить в приложение возможность ротации значений этого секрета, что уменьшит риск его утечки.

Для этого в настройки вместо одного значения выносим список пар ключ-значение:
"jwt_keys": {
"2024-01-15": "9PRJdoKCFBh/wezToNukI4BrvL2nqWLtllWBMILbj6Y=",
"2024-01-01": "3QxGq86nNBxlL74hv4iSktsj0+9vyGfDu1xeGg8q5BU=",
"2023-12-15": "RwZwIHhYG1AfoWcdb1LT6Pq5hMWvdaS9tuByWsX01XU=",
"2023-12-01": "LlceZPcwnnrJeDRGmPCEghtG3O777A23NmSsPrB1H94="
}

где ключ – это дата, с которой начинает использоваться данный секрет для генерации новых подписей, а значение – само значение секрета.

При создании токена берём нужный секрет на текущую дату и кладём эту дату в заголовок в поле kid (Key ID).
При валидации берём из конфига нужное значение на основе значения kid.

Старые значения можно удалять из конфига, когда все выпущенные с ними токены проэкспарятся.

Таким образом ротация секретов будет бесшовной, не требуя инвалидации старых токенов после смены значений.
🧜‍♀️ Открыл для себя потрясающий инструмент для рисования диаграмм и графиков – Mermaid:
https://mermaid.js.org/

Отличие от какого-нибудь draw io в том, что Mermaid предоставляет некоторый синтаксис для разных видов диаграмм, которым ты описываешь схему, а дальше рисунок генерируется за тебя.

Например, сиквенс диаграмму со схемой работы OAuth 2 можно описать так:
sequenceDiagram
participant Client as Client<br/>(Browser)
participant App as Application Server
participant Auth as OAuth Provider

Note over Client: Unauthenticated
Client->>App: Request Page
App->>Client: Redirect to Login Page
Client->>Auth: Request Login Page
Auth->>Client: Login Page
Client->>Auth: Submit Credentials
Auth->>Auth: Verify Credentials
Auth->>Client: Redirect to App with Auth Code
Client->>App: Request App with Auth Code
App->>Auth: Request Token for Client
Note over App, Auth: Request includes:<br/>App ID, App Secret, Auth Code
Auth->>Auth: Verify App ID + Secret, Auth code
Auth->>App: Token for Client
App->>Client: Token

Note over Client: Authenticated
Client->>App: Request Page with token
App->>App: Verify Token
App->>Client: Return Page


Выложил Gist с кодом двух диаграмм: со схемой работы OAuth из примера выше и со схемой работы с репозиторием по Gitflow.
Там же можно посмотреть рисунки, которые генерирует Mermaid.

Генерация происходит налету.
Поддерживается множество видов схем (см. документацию).
Бесплатный. Опенсорсный.
Есть онлайн редактор (правда, со странноватым дизайном).
Поддержка Mermaid есть в Github для markdown файлов.
Есть плагин для Obsidian.

Так как диаграммы представлены текстом, то они легко правятся/дополняются без необходимости сдвигать/выравнивать множество элементов на рисунке вручную.
Вдобавок эти изменения хорошо отслеживаются через diff, а не через метод пристального вглядывания в две версии рисунка.

Например, диаграмму по Gitflow я сделал в двух версиях: сначала без примера bugfix бранча, а затем с ним.
Для внесения этого изменения потребовалось заменить строку
commit id: "fix bug 2"
на
branch bugfix/bug-2 order: 4
commit id: "fix bug 2"
checkout release/0.2
merge bugfix/bug-2 id: "merge fix"

и подправить ордеринг для feature веток.

Это заняло не больше двух минут. В случае с каким-нибудь Visio или draw io я бы потратил гораздо больше времени и нервов 🙂
🔥4
Раз уж даже Habr добавил тёмную тему спустя столько лет, то и мне надо не отставать.

SystemOut.blog – теперь и в тёмном цвете.
🔥4