Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

Сервис авторизации go-zero GRPC

Запуск без использования докера на хост машине Linux (Debian/Ubuntu)

Установка зависимостей

Mysql server, redis, etcd
 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

Описание API GRPC

Функция Описание Параметры Возвращает
Registration Функция выполняет регистрацию пользователя, перед этим осуществляя проверку email и username на наличие дубликатов. После успешной регистрации в отдельном потоке отправляется email с кодом подтверждения на указанный почтовый адрес.
В случае неудачи возвращает ошибку.
message RegReq{
string email = 1;
string username = 2;
string firstName = 3;
string lastName = 4;
string password = 5;
}
message RegResp{
int64 id = 1;
}
Login Аутентификация пользователя по логину (email) и паролю, служит для получения access токена и refresh токена для дальнейшей авторизации пользователя. Возвращает ошибки в случае неуспешной аутентификации.
message LoginReq{
string login = 1;
string password = 2;
}
message LoginResp{
string accessToken = 1;
string refresh = 2;
}
UserInfo Возвращает текущего пользователя по переданному access токену. В случае неудачи вернет ошибку.
message UserInfoReq{
string accessToken = 1;
}
message UserInfoResp{
int64 id = 1;
string email = 2;
string username = 3;
string firstName = 4;
string lastName = 5;
}
CheckVerificationCode Проверка кода пользователя который мы прислали при регистрации на эмейл, в реальном не тестовом примере рационально еще добавить идентификатор пользователя. В данном случае этого было не указано, просто проверяется код в БД.
message VerificationCodeReq{
int64 code = 1;
}

message VerificationCodeResp{
bool result = 1;
}

Что дальше:

  • Makefile
  • Доработать Dockerfile

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /