Я бы go за первый подход. Вместо «централизованного сервера аутентификации» это будет скорее «микросервис авторизации».
Теперь важная часть - как обрабатывать саму аутентификацию. В общем, вы можете использовать сеанс или JWT.
Я думаю, что JWT идеально подходит для микросервисов. Если вы используете сеанс, вы в основном «централизуете» свою аутентификацию и авторизацию. Я имею в виду, что после аутентификации пользователя каждый раз, когда пользователь делает запрос, все микросервисы, которые реагируют на этот ответ, должны проверять централизованный сеанс. Это не только увеличит задержку, но и будет максимально соответствовать распределенной системе. Смысл использования микросервисов в том, чтобы создавать реплики сервисов и таким образом масштабировать их по горизонтали.
Если вы используете JWT, микросервисам нужен только секретный ключ для проверки токена. В основном нет централизованного хранилища (сеанса) для аутентификации.
Что касается «службы аутентификации», я бы посоветовал вам хранить только данные, связанные с аутентификацией и авторизацией (включая информацию о пользователе, связанную с аутентификацией. Номер телефона, адрес электронной почты, имя et c. вы, вероятно, будете использовать это, если пользователю нужно сменить пароль, забыть пароль и т. д. c.). Другие специфические c данные, относящиеся к определенной c роли, могут храниться в соответствующей службе.