LINUX.ORG.RU

Авторизация для Kingdom of Lor

 ,


0

1

Пилим игру - Королество linux.org.ru - Королевство linux.org.ru

Хотелось бы сделать в ней авторизацию через аккаунты на лоре. Не являюсь специалистом по Java и потому прошу помощи: есть следующая задумка, как это реализовать минимальными усилиями.

  1. При входе в игру на клиентской стороне предлагается ввести логин с лора и некий auth-token (скрин).
  2. Введя логин, токен и нажав кнопку «Авторизоваться» логин и токен шлются на сервер.
  3. Сервер же шлет запрос на linux.org.ru с логином и токеном и лор отвечает, соответствует ли этот токен указанному логину.
  4. Если соответствует, то сервер логинит юзера, считая, что игрок действительно тот, за кого себя выдает. Если не соответствует, то выводится ошибка.
  • Предлагается сделать токен по следующей формуле:
    $token = sha512(score + sha512(password_hash))
    , чтобы минимизировать вероятность его угадывания на основании открытых данных юзера.
  • Запрос, который шлет сервер на этапе №3 можно описать так:
    https://www.linux.org.ru/api/validate-kol-token?login=bk_&token=aaabbbccc
    , на что лор может вернуть либо код 200, либо 403.
  • Соответственно, сам юзер на клиенте берет токен, залогинившись на лор и перейдя по ссылке
    https://www.linux.org.ru/api/get-kol-token
    , на что лор вернет токен. Юзер этот токен скопипастит в игру и нажмет «Авторизоваться».

БД менять не надо, все сводится к добавлению двух обработчиков.

Товарищи, кто может помочь запилить это?

★★

Никто не будет делать этого для твоей игры. А апи всё пилят, да никак не запилят.

Deleted
()

Поднимется скор у игрока и всё. (или опустится как у илитной части ЛОРа). Опять бежать за токеном?

Тебе уже предлагали достаточно неплохую схему — запихнуть сгенерированный ключ в профиль игрока. Захотел игрок залогиниться — пусть правит свой профиль, а игра спарсит страничку.

a1batross ★★★★★
()
Последнее исправление: a1batross (всего исправлений: 1)
Ответ на: комментарий от a1batross

Тебе уже предлагали достаточно неплохую схему — запихнуть сгенерированный ключ в профиль игрока. Захотел игрок залогиниться — пусть правит свой профиль, а игра спарсит страничку.

Еще раз - профиль общедоступен. Это значит, если игра может спарсить страничку, то и любой другой человек сможет скопировать этот ключ с чужой странички и зайти под чужим логином.

Захочешь ты зайти в игру, а не сможешь, потому что кто-то под твоим ником уже зашел.

bk_ ★★
() автор топика
Ответ на: комментарий от a1batross

Поднимется скор у игрока и всё. (или опустится как у илитной части ЛОРа). Опять бежать за токеном?

$token = sha512(nick + sha512(password_hash))

Так лучше? Дело не в формуле расчета токена, а в том, чтобы найти того, кто сможет это запилить.

bk_ ★★
() автор топика
Ответ на: комментарий от bk_

Еще раз - профиль общедоступен.

И что? Придумываешь себе пароль, на страницу лепишь sha512 этого пароля, в игру вводишь сам пароль, игра сравнивает, и вперед.

morse ★★★★★
()
Ответ на: комментарий от morse

И что? Придумываешь себе пароль, на страницу лепишь sha512 этого пароля, в игру вводишь сам пароль, игра сравнивает, и вперед.

Как вариант, да.

bk_ ★★
() автор топика
Ответ на: комментарий от morse

Он предполагает на тот момент, что клиент может обмануть сервер, дав публичный хеш, и зайти под чужим ником.

Поэтому я и хотел дополнить про приватные и публичные «ключи». Нужна схема, которая будет такой: легко проверить, но сложно подделать. Например, мастер-сервер. Ему скармливаешь логин и игровой пароль — ключ, он проверяет и говорит не дурак ли клиент. Можно конечно сделать, чтобы каждый игровой сервер делал так для самого себя, т.е. в профиле придётся вводить свой хеш для каждого сервера. Ну и заодно конечно проверку, нужно ли вообще такое требовать от игроков.

a1batross ★★★★★
()
Ответ на: комментарий от bk_

Тут ведь технически подкованная аудитория. Т.ч. у игрока есть secret key, а в профиль идёт public key. Кто смог сделать правильную подпись — тот и игрок.

Так например это реализовано в let's encrypt. См. также https://godoc.org/github.com/square/go-jose

Т.е. вся коммуникация шифрованная и подписанная. Игровой сервер проверяет подписи по профилям.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от a1batross

В принципе, тогда самой простой выглядит такая схема:

  • юзер в игре на скрине «создания токена» вводит логин, желаемый пароль и жмет «сгенерить токен»
  • игра генерит токен
    token = sha256(nick + password)
  • юзер вставляет токен на страницу профиля
  • потом юзер на скрине «авторизации» вводит свой ник, пароль и сервер проверяет его корректность, парся страницу профиля.
bk_ ★★
() автор топика
Ответ на: комментарий от a1batross

В любом случае, сервер должен знать о пароле игрока.

Да, игрок введет пароль на клиенте - он там будет запомнен, больше вводить не придется. А на сервер будет автоматически слаться клиентом при нажатии «Авторизоваться».

bk_ ★★
() автор топика
Ответ на: комментарий от a1batross

Нужно большими красными буквами писать, чтобы не вводили туда пароль от ЛОР аккаунта. %)

beastie
Тут ведь технически подкованная аудитория.

Ага :D

bk_ ★★
() автор топика
Ответ на: комментарий от bk_

Да. Запилить на лоре апи на авторизацию, которое отдаёт токен.

Deleted
()
Ответ на: комментарий от bk_

Открытый ключ положи на страничку профиля. Найди как передать при авторизации подписанное закрытым сообщение.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.