Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ivanhilkov @winsent
- На машине, которая была без домена с внешним IP:
- http://213.171.50.28:64107/
- Введена новая система аутенфикации и авторизации. Авторизация описана в другой карточке будет.
- Новая система аутенфикации исключает возможность использования cookies, что предполагает клиенту лично заботиться о хранилище данных. Для мобильных GUI-приложений - это не было никогда проблемой, а проблемой было для браузеров.
- Ввиду достаточно давнего существования WebStorage среди браузерного API, клиент запросто может сам заботиться о правильном хранение аутенфикационных данных и данных для авторизации за счёт использования LocalStorage и SessionStorage (отличаются тем, что SessionStorage хранится только, пока вкладка открыта, LocalStorage контролируется вручную).
- Алгоритм прохождения аутенфикации:
- 1). Сначала необходимо пройти 1-ый этап аутенфикации для получения Temporary keys.
- Происходит это при помощи метода:
- POST /api/authentication?mode=creditianals
- где нужно передать (Form data, application/x-www-form-urlencoded):
- - Login
- - Password Hash (для старых аккаунтов можно SHA-256 применять, но для новых SHA-512, старые аккаунты будут выпилены, пока оставлены чисто для тестов).
- После успешного выполнения запроса, будет примерно след. ответ:
- {
- "Key": "d1667a5d-cdc7-4ec4-96d5-fbed51dc1d22",
- "Password": "vniiVdUWxCPkVd3BMESkLjNQYPFYczh9g6qjyFZPmr5gWGcnIWaT6Qd0ewR2kBOJ",
- "Salt": "+rOLFoneUrHQxP8lnhwZ6EW1scp3m8iQIdKsALUh6pVm/ABYdqxKA4bFyl+Z5e7f"
- }
- 2). Эти данные будут необходимо для составления PBKDF2-ключа ( CryptoJS поддерживает данное построение).
- Как раз, все данные, которые пришли будут необходимы для создания PBKDF2-ключа:
- var pbkdf2Key = pbkdf2.CreateDeriviationKey(
- Key,
- Password,
- Salt
- );
- Помимо того, что нужно будет собрать ключ, нужно будет просчитать SHA-512 хэш от строки: ( Key + Base64( Pbkdf2Bytes ) ).
- Байты можно запросто получить/преобразовать при помощи той же либы CryptoJS от Google.
- Далее, нужно создать POST-запроса на:
- POST /api/authentication?mode=pbkdf2сheck
- где нужно передать (Form data, application/x-www-form-urlencoded):
- - KeyId
- - Base64( Pbkdf2 )
- - Hash ( KeyId + Base64( Pbkdf2 ) )
- Далее, бекенд проверяет целостность созданного ключа и checksum, взятый при помощи хэша, если все хорошо, то будет вернет примерно след.:
- {
- Id: verificationKeyId,
- EncodedKey = ConvertedToBase64String(rawKeys)
- }
- 3). Далее, получив данные необходимо составить битовую маску (не байтовую, а именно битовую) при помощи след. мини-алгоритма:
- • Конвертируем строку в массив байт
- • Байтовый массив - выравненный и разбит по 4-е байты на одну сущность:
- [ firstByte | firstBitNumber | secondByte | secondBitNumber ]
- И так далее, необходимо прочитать из firstByte номер бита указанный в firstBitNumber, в secondByte прочитать значение бита указанное по номеру из secondBitNumber и так далее...
- Биты читать можно запросто при помощи:
- var getBit = function( bitNumber, value ) {
- return ( value & ( 1 << bitNumber ) ) >> bitNumber;
- }
- Прочитав каждый бит, добавляем его в общую результирующую строку, когда будут пройдены все элементы байтового массива, будет составлена битовая маска в виде строки.
- 4). Далее, нужно создать POST-запроса на:
- POST /api/authentication?mode=verification
- где нужно передать (Form data, application/x-www-form-urlencoded):
- - VerificationKey <Id: verificationKeyId из прошлого ответа>
- - Bitmask: <строка, собранная из прошлого шага)
- - Hash ( VerificationKey + Bitmask )
- Если было все правильно составлено, Вам выдаться ID сессии.
- PS
- Используя булевой параметр в 1-ом запросе, LongExpiration: true
- сессия для клиента выдаться на 1 неделю, а не на сутки, как ранее или если не указывать данный параметр. И да, напомню, что теперь это без cookies. Браузерному клиенту необходимо вручную следить за этим, работая c WebStorage ( Session, Local storages ), т.к. cookies - это дырявая плохая вещь, неоднкратно матерящееся в вебе.
- Если Вы прошли успешно все шаги, поздравляю, Вы можете теперь перейти к процессу авторизации, там есть также нововведение, нужно считать Hmac.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement