sudo apt install golang mysql-server redis etcd git
Создаем пользователя и БД, а также даем права на созданную БД Mysql
sudo mysql -u root
Вводим пароль, после ввода пароля у нас появится консоль mysql>
CREATE DATABASE test; // Для тестов CREATE DATABASE dev; // Для разработки CREATE USER 'test'@'localhost' IDENTIFIED BY 'testPassword'; GRANT ALL PRIVILEGES ON test . * TO 'test'@'localhost'; GRANT ALL PRIVILEGES ON dev . * TO 'test'@'localhost';
Клонируем репозиторий
git clone https://github.com/shyhirt/authorizationGRPC.git cd authorizationGRPC
После чего развернем бекапы БД - для тестов структура+данные, для dev просто структура.
mysql -u test -p test < test/userTest.sql mysql -u test -p dev < user/model/user.sql
Генерируем JWT приватный и публичный ключи
cd etc mkdir keys cd keys ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub
Разберем файл конфига
Name: user.rpc ListenOn: 0.0.0.0:8080 Etcd: Hosts: - 127.0.0.1:2379 Key: user.rpc DataSource: test:passwordtest@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=true Cache: - Host: 127.0.0.1:6379 Pass: Type: node jwt: AccessSecret: "etc/keys/jwtRS256.key" AccessPublic: "etc/keys/jwtRS256.key.pub" AccessExpire: 3600 RefreshExpire: 345600 mail: Login: "smtpLogin" Identity: "" From: "test@gmail.com" Password: "secretPasswordSmtpService" SmtpHost: "smtp.elasticemail.com" SmtpPort: "2525"
- Etcd Настройки Etcd сервера
- DataSource: DSN нашего mysql сервера
- Cache Адрес Redis
- jwt AccessSecret AccessPublic Пути к ключам для валидации и подписи JWT
- mail Параметры SMTP сервера меняем на свои.
- В репозитории оставлены сгенерированые RSA ключи и файлы конфигурации, но в реальной жизни так делать нельзя)))
- Использовать эти ключи уже где либо категорически не рекомендуется.
Вернемся в наш каталог с исходным кодом
cd ../.. go mod install go mod tidy go build ./authorizationGRPC -f etc/user.yaml
./authorizationGRPC -f etc/user-test.yaml &>/dev/null & cd test | go test ./test/...
Убьем процесс
killall ./authorizationGRPC
Функция | Описание | Параметры | Возвращает |
---|---|---|---|
Registration | Функция выполняет регистрацию пользователя, перед этим осуществляя проверку email и username на наличие дубликатов. После успешной регистрации в отдельном потоке отправляется email с кодом подтверждения на указанный почтовый адрес. В случае неудачи возвращает ошибку. |
message RegReq{ |
message RegResp{ |
Login | Аутентификация пользователя по логину (email) и паролю, служит для получения access токена и refresh токена для дальнейшей авторизации пользователя. Возвращает ошибки в случае неуспешной аутентификации. | message LoginReq{ |
message LoginResp{ |
UserInfo | Возвращает текущего пользователя по переданному access токену. В случае неудачи вернет ошибку. | message UserInfoReq{ |
message UserInfoResp{ |
CheckVerificationCode | Проверка кода пользователя который мы прислали при регистрации на эмейл, в реальном не тестовом примере рационально еще добавить идентификатор пользователя. В данном случае этого было не указано, просто проверяется код в БД. | message VerificationCodeReq{ |
|
- Makefile
- Доработать Dockerfile