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