Авторизация, подобно Clash of Clans? Как она работает?
Здравствуйте
Меня интересует как работает авторизация, к примеру в такой игре как Clash of Clans.
Онлайн там на сервере около 5 миллионов игроков.
Игра не требует никакой авторизации: установил - играй.
В настройках есть возможность привязать учетку к аккаунту Google или Facebook или GameCenter (iOS), но это ведь просто привязка, как на каком нибудь сайте, чтобы заходить не только по обычному логину/паролю.
Меня интересует как именно работает эта авторизация без указания данных ? Игра не требует никакой авторизации через Google Play Services / Game Center, что бы играть по интернету. Но ведь как то же авторизация происходит ?
Конечно это может быть какой нибудь Telephony.DeviceID / ANDROID_ID / Mac Adress - уникальный (но не гарантирующий это) ИД устройства. Но если всё так просто, то кто то мог бы сгенерировать тысячи аккаунтов (ибо для авторизации нужен только этот ид).
Или другой вариант: никакой ID устройства тут не используется, просто сервер присылает какой нибудь уникальный UUID при первом запуске, что и будет токеном для входа.
Но что опять же мешает тогда нарегать тысячи аккаунтов ?
Интересуюсь потому, что собираюсь делать игру на мобильные устройства, и хочу узнать есть ли смысл разбираться с подобной авторизацией, или просто сделать обязательную регистрацию в игре при первом запуске, через Google / Play Services / Facebook / Game Center. Просто если кто то будет регать тысячи аккаунтов, то сервер ляжет в конечном счете, там точно должно быть что то посложнее.
Вижу 2 возможных варианта:
1. Отправляется подписанный приложением запрос на регистрацию на основе уникального идентификатора устройства (Telephony.DeviceID / ANDROID_ID / Mac Adress и возможно ещё каких-то данных) с шифрованием по открытому ключу приложения (ключ "вшит" внутри приложения): формула формирования - также, внутри приложения, запрос перед передачей - шифруется ключом.
Т.е. отправляются подписанные данные самим приложением, которые Вы не сможете подделать БЕЗ установленного приложения, что не даст понаделать тучу аккаунтов.
2. Возможно, что через ID пользователя гугл (используя API).
1. Я не упоминал в описании, но игра делается на Unity. Чтобы достать код, генерирующий этот пароль, потребуется 1 минута: apk -> winrar -> jetbrains dotPeek (decompiler) -> чистый код на C#, который создает этот пароль и отправляет его на сервер.
2. Там это точно не API, поскольку таких прав приложение не требует, да и гугл бы спросил меня хочу ли я поделиться данными с этим приложением.
Понимаю, что любое приложение можно разобрать, но я что то не слышал, чтобы в Clash of clans регали тысячи аккаунтов из за такой простой регистрации.
robertono: да просто никому это не надо, а если кому и надо, то вполне возможно, что первое достижение в игре и есть сама регистрация, т.е. без запуска процесса игры - аккаунт никакой не создаётся (чтобы избегать записей пустышек в базе), а чтобы обновить - нужно иметь токен, который генерится после постинга первого НЕНУЛЕВОГО результата.
(но это надо проверять...)
Просто у меня так сделано в плане регистрации по почте: высылается линк на e-mail, но пользователь в базе - не заводится! Только когда кликнут по линку и там hash-совпадёт корректно - тогда создаётся в базе на сервере. В итоге - нет "пустышек".
xmoonlight: да меня скорее не пустышки пугают, а что используя такую простую регистрацию можно нарегать аккаунтов, на них повесить ботов, и так получиться целая армия. По достижению определенного уровня боты смогут передавать внутриигровые деньги друг другу, и в итоге все они отправят деньги какому то одному игроку. Можно сохранять IP с которого была регистрация и авторизации, но на прокси это бы не работало. Знаю что игры не защищены от ботов. И может я вовсе беспокоюсь по пустяку, и к моменту, когда кто то напишет такого мощного бота, я уже буду иметь очень много загрузок, и это не будет уже иметь такое большое значение) Опыта у меня такого большого нет, опасения оправданы.
xmoonlight: Хотя на самом деле самое правильно тут это продумать геймплей так, чтобы в этих аккаунтов было мало смысла. Но что мне делать, если весь геймплей развернут вокруг виртуальной экономики, и такая функция обязательна ?
xmoonlight: в целом можно требовать авторизацию в Google / Google Play Services, для доступа к внутриигровым денежным переводам.
Большое спасибо за помощь.
Там все очень просто. Вначале идет проверка есть ли сохраненный логин и пароль. Если нет то идет запрос на регистрацию. Если есть, то на вход. А насчет тысячей регистрации это не самая большая проблема. Куда важнее сделать так чтобы ваши сервера не падали, это маштабируемость.
да, всё верно.
Но меня скорее пугает не нагрузка на сервера, а нарушение геймплея. Игра развернута вокруг виртуальной экономики, и боты смогут скинуть все виртуальные деньги одному игроку (по достижению N уровня). Как этого избежать, если эта функция в подобной игре обязательна ?
robertono: в таких играх сложно бороться с ботоводством. Например в игре HayDay банили тех игроков которые например на 6 уровне не строили какую нибудь постройку. То есть надо будет делать проверку на бота, которая зависит исключительно от геймплея игры. Или можно сделать так чтобы игроки логинились только через гугл плей, геймцент, фейсбук. Отправляли токен и id. Далее проверка этого всего через сервева гугла, эпла, фейсбука. Хоть как то затормозит ботоводов. Если мне не отказывает память в игре Walking Robots от Pixonic. Они так и сделали.
Алибек Бельдинов: большое спасибо за примеры других игр, о них я не знал. Я подумал может сделать обязательную привязку аккаунта к google play services / game center , для разблокировки функции внутриигровых переводов. Получается компромисс - в начале регистрация не требуется, а боты переводы делать не смогут
robertono: "Но меня скорее пугает не нагрузка на сервера, а нарушение геймплея."
Можно отслеживать такое поведение. Если очень много разных аккаунтов переводят ценности одному игроку, но ничего не получают взамен (или получают, но, копеешные предметы, например кирпич за $100500), то временный бан или передача модератору.
Во-вторых, можно без логинов и паролей, с уникальным идентификатором, но с капчой.
В-третьих, вариант 2 можно усовершенствовать до закоса под новую рекапчу. Создать, например, тренеровочный уровень, (как предлагали выше) в котором предлагать игроку найти в сундуке какой-то игровой предмет, который должен быть всегда разным, и меняться в рамках одного типа. (50 видов монет, 50 видов ваз, 100 видов купюр). Найденные монеты можно например, переносить в игру как стартовый баланс. Но это я что-то увлёкся :)
Если вы не залогинены в Gamecenter и не привяжете к FB аккаунт, то удалив приложение и скачав заново прогресс пропадет. Так что высылается уникальный ключ, который сохраняется в приложении. Если вы вошли в GC(у большинства геймеров так и есть), то он привязывается к id GC, без ввода каких либо данных автоматически.
А что мешает хитрым игрокам нарегать тысячи аккаунтов, если регистрация на сервере такая простая ?
Видите ли, или клиент высылает серверу ключ, или наоборот сервер присылает клиенту, это не особо важно. Этот принцип и так ясен.
Меня беспокоит только один момент - регистрация тысяч аккаунтов, если её процесс такой простой.
Я не слышал, чтобы в Clash of Clans такое было, поэтому я очень хочу узнать как сделать защиту от этого.
robertono: не думаю что есть проблемы с тысячами аккаунтов. Даже если присылает ключ, можно всегда взломать приложение через iNalyzer что там происходит, и заставить через него же регать аккаунты, как смысл от этого? нужно тогда бота писать, чтобы он играть мог в игру, а без этого нет смысла.
Alexander: Ну если кто то знает как регать аккаунты, то он и бота так же напишет. У меня игра по теме виртуальной экономики, и у игроков есть возможность пересылать виртуальные деньги друг другу.
По достижению N уровня боты смогут отправлять деньги, и по команде отправят всё какому то одному игроку, вот чего я беспокоюсь. На самом деле надо как то проектировать геймплей так, чтобы в этих ботах не было смысла, но что если игра развернута вокруг этой экономики, и эта функция просто необходима ?