Возможности Yii в плане авторизации

Здравствуйте!

Изучаю примудрости авторизации…с английским дружу не очень хорошо…но что-то всёже понимаю.

Я выполнил все рекомендации из мануала…скрипт ругнулся на protected/runtime

Создал, дал права.

Всё отлично…инфа от CSecurityManager пишется в файлик state.bin при авторизации.

НО!

Предположим, что у нас 1 или 2 тысячи пользователей…

Какое решение здесь может быть? Использовать Memcache? Не очень хочется…ставить, настраивать и т.п…лишний демон…вообщем Вы меня поняли)

Может БД?

Или есть способ хранить сессию без этого самого ./runtime ?

Ман по CSecurityManager курил…ответа на свой вопрос не нашёл.

Заранее спасибо  ;)

Хранить сессии в БД? или я что-то не понял?

Прописываешь в конфиге что-то вроде



        'session'=>array(


            'class'=>'CDbHttpSession',


            'connectionID'=>'db',


            'sessionTableName'=>'sessions',


        ),


создаешь таблицу sessions (или yii по-моему сам ее создает если нет) и радуешься жизни :)

Quote

Хранить сессии в БД? или я что-то не понял?

Да, чтобы не перечитывать файл state.bin

Quote

Прописываешь в конфиге что-то вроде


        'session'=>array(


            'class'=>'CDbHttpSession',


            'connectionID'=>'db',


            'sessionTableName'=>'sessions',


        ),


создаешь таблицу sessions (или yii по-моему сам ее создает если нет) и радуешься жизни :)

К сожалению не помогло(

Таблица sessions создалась, записалась строка…с примерно таким содержимым:

7d9747fa2898749373588a49fc5cf437__id|i:6;7d9747fa2898749373588a49fc5cf437_name|s:17:"test@login.qq";7d9747fa2898749373588a49fc5cf437__states|a:0:{}

Но, вместе с этим вновь создался файл state.bin с таким содержимым:

a:1:{s:34:"Yii.CSecurityManager.validationkey";s:38:"86503774416709218427362173661052937470";}

Есть ли возможность хранить этот самый "validationkey" в БД?

Quote

Quote

Хранить сессии в БД? или я что-то не понял?

Да, чтобы не перечитывать файл state.bin

rosko, прошу прощения за не точность…в том файле хранятся не сессии, а validationkey…для генерирования HMAC(Как я понял вот отсюда http://www.yiiframew…ationKey-detail )

Предполагаю, что его нужно установить в ручную…в конфиге…как я пока ещё не понял…докопаю…напишу сюда

Ура, проблема решена!

Указал ключ статично.



		'securityManager'	=> array(


			'validationKey'		=> '1111111111111111111111111111111111111',


		),


Ух-ты! Ну, здорово.

А можно меня просветить в плане класс CSecurityManager?

Что такое HMAC? Как практически оно используется?

Как можно использовать методы encrypt() и decrypt()?

Буду премного благодарен.

Quote

Ух-ты! Ну, здорово.

А можно меня просветить в плане класс CSecurityManager?

Что такое HMAC? Как практически оно используется?

Как можно использовать методы encrypt() и decrypt()?

Буду премного благодарен.

Честно говоря я ещё сам не разобрался с ним…HMAC это хеш-код идентификации сообщений…вики: http://ru.wikipedia.org/wiki/HMAC

Осмелюсь предположить, что это (в моём понимании) надстройка (например над md5)…которая служит лишь для усиления хэш алгоритмов…иными словами…"более крутой хэш" =)

При попытке закриптовать строку таким способом:



echo CSecurityManager::encrypt('q1w2e3');


Получил интересное сообщение…



Controller does not have a method named "getEncryptionKey".


Разбираюсь…как накопаю что-нибудь отпишусь…достаточно интересный класс =)

Интересная штука)))

Создал в контроллере метод:



	public function getEncryptionKey() {


		return '121212121212';


	}


…при криптовании строки q1w2e3 получил



/C�z���A��vY�


Жесть какая-то…пробовал с разными ключами…итог - куча вот таких вот не понятных символов…

Пойду курить ман…

Исходя из доков в файле CSecurityManager.php вызывать кодирование/декодирование надо так

Yii::app()->getSecurityManager()->encrypt()

Ибо getEncryptionKey есть функция самого класса CSecurityManager, а не контроллера. И ключ шифрования устанавливается в конфиге приложения, если он не указан - генерится случайным образом.

Класс используется для шифрования данных внутри системы, как пример - при валидации кукисов. Для шифрации используется mcrypt модуль пхп.

Странно, но при каждом обновлении страницы зашифрованная строка получается постоянно разная, хотя ключь и сама строка не меняется…либо я что-то не докурил, либо так и задумано(в чём я очень сильно сомневаюсь)

HMAC - алгоритм, гарантирующий, что закодированные данные не были изменены 3 лицом. Используется в YII при включенном режиме проверки куков. Его НЕЛЬЗЯ использовать для хранения паролей, т.к. в итоговую закодированную строку добавляются исходные кодируемые данные.

Метод encrypt() использует 3DES алгоритм шифрования, который при кодировании использует encryptionKey и создаваемый случайным образом вектор инициализации. Засчет случайных значений этого вектора получаются случайные шифрованные данные.