Skip to content

Instantly share code, notes, and snippets.

@Sorix

Sorix/task.md Secret

Created February 17, 2019 08:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Sorix/d26ed51f76e1fe707a85484af476ac83 to your computer and use it in GitHub Desktop.
Save Sorix/d26ed51f76e1fe707a85484af476ac83 to your computer and use it in GitHub Desktop.
Auth server

Краткое описание

Клиенты будут обращаться к серверу для получения JSON Web Token. Сервер будет проверять данные в PostgreSQL, если они будут совпадать, то выдается JWT.

Сервер будет на Node.JS (хоститься будет на Zeit Now, возможно на Lambda).

Схема БД

CREATE TABLE user (
    login text PRIMARY KEY,
    password_hash text NOT NULL,
    roles text[] NOT NULL
);

CREATE TABLE fridge (
	id integer PRIMARY KEY,
    hardware_id text UNIQUE
);

JWT Claim

{
  "sub": "login@login.com",
  "iat": 1516239022,
  "https://hasura.io/jwt/claims": {
    "x-hasura-allowed-roles": ["admin","user"],
    "x-hasura-default-role": "admin"
  }
}

Виды авторизации

Запрос токена от клиента будет приходить через обычный POST-запрос к REST API. Авторизация будет возможна двумя методами.

Логин и пароль

Запрос от клиента:

{
	"login": "test@test.com",
	"password": "123"
}

При авторизации по логину и паролю нужно найти в базе данных пользователя с заданным паролем и вернуть из таблицы user. В базе данных пароль будет хранится в хешированном виде, метод хеширования на ваше усмотрение.

  • x-hasura-allowed-roles: значение берется из значения атрибута roles (в бд тип text[])
  • x-hasura-default-role: берется первое значение из массива allowed-roles

Hardware ID

Запрос от клиента:

{
	"hardware_id": "DAHS92KDP",
}

При авторизации с использованием Hardware ID нужно найти в БД в таблице fridges объект с таким же значение аттрибута hardware_id. Если объект найден, то авторизуем, если нет, то возвращаем ошибку.

  • x-hasura-allowed-roles: значение всегда ["fridge"]
  • x-hasura-default-role: значение всегда fridge
@gadfil
Copy link

gadfil commented Feb 17, 2019

А как же рефрешь токен, проверка того что он будет использоваться только один раз, инвалидация рефрешь токена после выхода, множесвенные рефрешь токены?
Ну и естсвенно куки для вебклтиента, без них увы в вебе будут хранить токены в localstorage что гразит xss

@Sorix
Copy link
Author

Sorix commented Feb 17, 2019

@gadfil, напишите мне в приват, к сожалению, не могу вас по нику идентифицировать

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment