Skip to content

shyhirt/authorizationGRPC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Watchers

Forks

Releases

No releases published

Packages

No packages published