5. Атрибуты
Атрибуты RADIUS используются для передачи информации, связанной с аутентификацией и проверкой полномочий пользователей, а также учетом их работы.
Некоторые атрибуты могут присутствовать в пакете в нескольких экземплярах (это указывается ниже при описании атрибутов).
Завершение списка атрибутов определяется значением поля Length в пакетах RADIUS.
Формат атрибутов показан ниже. Поля атрибута передаются слева направо.
0 1 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | Value ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type
Однооктетное поле, определяющее тип атрибута. Актуальные значения поля типа для атрибутов RADIUS вы можете узнать из последнего варианта документа Assigned Numbers [6]. Значения 192-223 предназначены для экспериментальных целей, значения 224-240 зарезервированы для разработчиков (специфические для реализации типы), а значения 241-255 являются резервными и не должны использоваться. Рассматриваемые в данной спецификации значения приведены в таблице.
Значение Тип 1-39 См. спецификацию RADIUS [2] 40 Acct-Status-Type 41 Acct-Delay-Time 42 Acct-Input-Octets 43 Acct-Output-Octets 44 Acct-Session-Id 45 Acct-Authentic 46 Acct-Session-Time 47 Acct-Input-Packets 48 Acct-Output-Packets 49 Acct-Terminate-Cause 50 Acct-Multi-Session-Id 51 Acct-Link-Count 60+ См. спецификацию RADIUS [2] - Length
- Однооктетное поле Length указывает размер данного атрибута с учетом полей Type, Length и Value. При получении атрибута с некорректно указанным размером в пакетах Accounting-Request, такие пакеты должны отбрасываться без уведомления.
- Value
Необязательное поле Value содержит значение атрибута. Формат и размер значения атрибута определяются значениями полей Type и Length.
Отметим, что ни один из типов RADIUS не использует в качестве завершения NUL-символ (hex 00). В частности, значения типа text и string в протоколе RADIUS не завершаются NUL-символом. Для каждого атрибута имеется поле размера, поэтому символы завершения не требуются. Значения типа text представляет собой последовательность символов в кодировке UTF-8 10646 [7], а значения типа string содержат 8-битовые бинарные данные. Серверы и клиенты RADIUS должны быть способны работать со строками, содержащими NUL-символы. При реализации RADIUS на основе языка C не следует использовать для обработки строк функцию strcpy().
Значение атрибута может относиться к одному из пяти поддерживаемых типов данных. Отметим, что тип text является частным случаем (подмножеством) типа string.
- text
- от 1 до 253 октетов, содержащих символы в кодировке UTF-8 10646 [7]. Недопустима передача текстовых атрибутов нулевой длины. В таких случаях следует просто исключить атрибут.
- string
- от 1 до 253 октетов, содержащих бинарные данные (значения от 0 до 255, включительно). Недопустима передача string-атрибутов нулевой длины. В таких случаях следует просто исключить атрибут.
- address
- 32-битовое значение, первый октет является старшим.
- integer
- 32-битовое беззнаковое целое, первый октет является старшим.
- time
- 32-битовое беззнаковое целое (первый октет является старшим), показывающее число секунд, прошедших с 1 января 1970 г. (00:00:00 по Гринвичу — UTC). Стандартные атрибуты RADIUS не используют этот тип, но он добавлен для будущих расширений.