Network Working Group J. Miller
Internet-Draft P. Saint-Andre
Expires: December 20, 2002 Jabber Software Foundation
June 21, 2002
Обмен сообщениями через XMPP (XMPP Instant Messaging)
draft-miller-xmpp-im-00
Статус этого документа
Этот документ является рабочим документом (Internet-Draft) и полностью соответствует всем требованиям главы 10 RFC2026.
Internet-Drafts - это рабочие документы Internet Engineering Task Force (IETF), их подразделений и групп разработчиков. Другие группы также могут распространять свои рабочие документы в виде Internet-Draft.
Internet-Drafts являются черновыми набросками и действительны максимум шесть месяцев, они могут быть обновлены, заменены или опровергнуты другими документами в любой момент. Не стоит рассматривать Internet-Drafts в качестве справочного пособия или ссылаться на них, иначе как на "рабочие документы".
Этот рабочий документ потеряет силу 20 декабря 2002г.
Авторские права
Copyright (C) The Internet Society (2002). All Rights Reserved.
Краткий обзор
Данный документ описывает специфичные расширения протокола XMPP (eXtensible Messaging and Presence Protocol),
необходимые при создании приложения для обмена сообщениями и определения доступности
абонента (точнее: приложения, совместимого со свободно распространяемой системой
обмена сообщениями Jabber (Jabber instant messaging system).
Оглавление
1. Введение
1.1 Общий обзор
1.2 Терминология
1.3 Требования
1.4 Соглашения, использующиеся в документе
1.5 Обсуждение документа
1.6 Замечания об интеллектуальной собственности
2. Регистрация
2.1 Поток данных при регистрации
2.2 Поток данных при отмене регистрации
2.3 Определение пространства имен jabber:iq:register
2.3.1 Дочерние секции
2.3.2 DTD
2.3.3 Schema
3. Аутентификация
3.1 Аутентификация с использованием SASL
3.2 Аутентификация с использованием jabber:iq:auth
3.3 Определение пространства имен jabber:iq:auth
3.3.1 Дочерние секции
3.3.2 DTD
3.3.3 Schema
4. Обмен сообщениями
4.1 Указание получателя
4.2 Указание отправителя
4.3 Указание типа сообщения
4.4 Задание темы сообщения
4.5 Задание цепочки сообщений (thread)
4.6 Задание тела сообщения
4.7 Задание дополнительной информации
4.8 Ошибки при обмене сообщениями
5. Обмен информацией о доступности абонента
5.1 Ответственность узла и хоста
5.2 Объявление о доступности
5.3 Указание статуса доступности
5.4 Задание детализированной информации о статусе
5.5 Проверка доступности
5.6 Объявление о недоступности
6. Управление подпиской
6.1 Запрос на подписку
6.2 Обработка запроса на подписку
6.3 Прекращение подписки другого участника
6.4 Отписывание от информации о доступности абонента
7. Управление ростером
7.1 Получение ростера при входе в систему
7.2 Добавление объекта в ростер
7.3 Удаление объекта из ростера
7.4 Определение пространства имен jabber:iq:roster
7.4.1 Дочерние секции
7.4.2 DTD
7.4.3 Schema
8. Указания по маршритизации и доставке
9. Анализ безопасности
9.1 Надежная идентификация и шифрование
9.2 Соединения узла
* Справочная информация
* Связь с авторами
* Авторское право
1. Введение
1.1 Общий обзор
Базовые свойства протокола XMPP (XMPP Core[2]) предоставляют "строительные блоки"
для различных приложений, работающих в режиме "почти реального" времени. Этот
документ описывает специфичные расширения и применения базовых компонентов XMPP,
которые используются для реализации общей функциональности, ожидаемой от
системы обмена сообщениями и определения доступности абонента (главным образом,
в приложениях, совместимых со свободно распространяемой системой обмена сообщениями
Jabber). Большая часть этой функциональности обеспечивается использованием
расширений, задаваемых секциями со своими пространствами имен, помещаемых
в базовые секции, определенные в XMPP Core.
1.2 Терминология
Данный документ наследует терминологию, принятуюв XMPP Core[2].
1.3 Требования
В этом документе мы ставим задачу обеспечить узел следующей базовой
функциональностью для передачи сообщений и определения доступности абонента:
Регистрация учетной записи на хосте
Аутентификация хостом
Обмен сообщениями с другими узлами
Обмен информацией о доступности с другими узлами
Управление подпиской на доступность другим узлам и от них
Управление объектами в ростере (контакт-листе) узла
1.4 Соглашения, использующиеся в документе
Ключевые слова НЕОБХОДИМО (MUST), НЕДОПУСТИМО (MUST NOT), ТРЕБУЕТСЯ (REQUIRED),
СЛЕДУЕТ (SHOULD), НЕ СЛЕДУЕТ (SHOULD NOT), РЕКОМЕНДУЕТСЯ (RECOMMENDED),
МОЖЕТ (MAY), и НЕОБЯЗАТЕЛЬНО (OPTIONAL) в данном документе используются
в соответствии с описанным в RFC2119[1].
1.5 Обсуждение документа
Авторы приглашают к обсуждению тем, представленных в этом документе, в список
рассылки jabber-ietf@jabber.org (архивы и информация о подписке доступна
на http://www.jabber.org/cgi-bin/mailman/listinfo/jabber-ietf/).
1.6 Замечания об интеллектуальной собственности
Данный документ полностью совместим со всеми положениями главы 10 RFC 2026.
В этом изложении встречается термин "jabber" для идентификации схем URI, пространств
имен и другого синтаксиса протокола. Jabber[tm] является торговой маркой Jabber, Inc.
Если IETF примет этот документ (или его более новую редакцию) в качестве стандарта,
то Jabber, Inc предоставит разрешение на использование торговой марки "Jabber"
в соответствии с такой спецификацией.
2. Регистрация
Регистрация хостом необходима узлу для получения доступа к желаемой функциональности.
Разумеется, регистрация МОЖЕТ происходить вне контекста приложения для обмена
сообщениями и определения доступности (и, зачастую, так оно и происходит).
Однако, XMPP дает возможность узлу регистрироваться хостом и в контексте системы
обмена сообщениями. Эта функциональность обеспечивается посылкой и получением
блоков IQ в режиме запрос-ответ, где блоки IQ содержат секции в
пространстве имен jabber:iq:register.
2.1 Поток данных при регистрации
Шаг 1: Узел запрашивает хост о необходимой для регистрации информации:
Шаг 2: Хост сообщает о полях, необходимых для регистрации:
Choose a username and password to register with this service.
Примечание: Узлу ТРЕБУЕТСЯ предоставить информацию для всех полей (исключая ),
содержащихся в IQ ответе. (Блок XML, показанный выше, не содержит атрибута 'to',
поскольку запрашивающий еще не имеет учетной записи.)
Шаг 3: Узел предоставляет требующуюся информацию:
juliet@capulet.com
R0m30
juliet
Шаг 4: Хост информирует узел об успешной регистрации:
Шаг 4 (альтернативный): Хост сообщает узлу о неудачной регистрации:
Not Acceptable
2.2 Поток данных при отмене регистрации
Пространство имен jabber:iq:register также позволяет пользователю отменить
регистрацию хостом посылкой секции , как показано ниже.
Шаг 1: Узел посылает запрос на отмену регистрации:
Шаг 2: Хост информирует узел об успешной отмене регистрации:
2.3 Определение пространства имен jabber:iq:register
2.3.1 Дочерние секции
Несмотря на то, что в в пространство имен jabber:iq:register можно поместить
множество различных полей, только следующие поля (исключая ),
посланные хостом в IQ ответе, ТРЕБУЮТСЯ для регистрации. Официально
распознаваемые поля, доступные для использования:
instructions
username
password
name
email
address
city
state
zip
phone
url
date
misc
text
remove - запрос на отмену регистрации (посылается только в IQ с type='set')
2.3.2 DTD
2.3.3 Schema
3. Аутентификация
Для получения доступа к сети XMPP-совместимых приложений и, таким образом,
получения желаемой функциональности обмена сообщениями и определения доступности
абонента, узел должен быть аутентифицирован хостом. В качестве метода аутентификации
выделен SASL. Аутентификация, использующая старый метод jabber:iq:auth НЕОБЯЗАТЕЛЬНА,
но МОЖЕТ быть использована, если узел не поддерживает SASL.
3.1 Аутентификация с использованием SASL
Если узел поддерживает SASL, ему НЕОБХОДИМО использовать пространство имен SASL
в секции открытия при инициализации обмена с хостом.
За описанием протокола, как узел должен аутентифицироваться хостом, обращайтесь
к XMPP Core[2].
После аутентификации потока узла хостом, НЕОБХОДИМО предоставить ресурс, связанный
с этим соединением. Это достигается использованием пространства имен jabber:iq:auth.
Протокол для этого показан ниже.
Шаг 1: Узел запрашивает хост об информации, требуемой для начала сессии:
juliet
Шаг 2: Хост сообщает о необходимых полях (в данном случае, только имя пользователя
и ресурс):
juliet
Шаг 3: Узел посылает информацию о ресурсе:
juliet
balcony
Шаг 4: Хост информирует узел об успешном начале сессии:
3.2 Аутентификация с использованием jabber:iq:auth
Ранние версии XMPP содержат клиент-серверный протокол аутентификации, который
применяется после установления потока. Этот протокол, использующий пространство
имен jabber:iq:auth, описывается в данной главе.
Пространство имен jabber:iq:auth служит двум целям: (1) простой способ
аутентификации узла хостом и (2) способ создания ресурса, представляющего конкретное
соединение (или сессию), ассоциированное с узлом.
Ниже показан поток данных, дающий полный пример аутентификации узла хостом.
Шаг 1: Узел запрашивает хост об информации, требуемой для аутентификации:
juliet
Шаг 2: Хост сообщает о необходимых для аутентификации полях:
juliet
Шаг 3: Узел посылает аутентификационную информацию (зашифрованный пароль):
juliet
64d60e40febe09264c52bc9cbddd5dd1147fae97
balcony
Шаг 4: Хост информирует об успешной аутентификации:
Шаг 4 (альтернативный): Хост информирует о неудачной аутентификации:
Unauthorized
3.3 Определение пространства имен jabber:iq:auth
3.3.1 Дочерние секции
username - уникальное имя пользователя для узла (обычно имя пользователя системы).
password - секретный ключ или идентификационная фраза для доступа узла к хосту.
digest - объединение id потока и пароля, зашифрованное в соответствии с
SHA1 Secure Hash Algorithm[3] и представленное в виде шестнадцатиричного
числа (буквы должны быть строчными)
resource - уникальное значение для представления текущего соединения.
3.3.2 DTD
3.3.3 Schema
4. Обмен сообщениями
Обмен сообщениями в XMPP очень прост: используя секцию данных , узел
может послать сообщение другому узлу (или, в общем случае, любому участнику).
4.1 Указание получателя
Узел МОЖЕТ указать получателя сообщения присвоением соответствующего JID атрибуту
'to' секции . Обычно, значение атрибута 'to' определяет участника,
отличного от посылающего (исключение см. в следующем параграфе). Желаемым
получателем МОЖЕТ быть любой разрешенный JID (например, узел на том же хосте,
узел на другом хосте, свой хост или другой хост).
Если адрес в 'to' не определен, то подразумевается, что сообщение адресовано
самому отправляющему узлу; кроме того, сообщение явно или неявно адресованное
отправляющему узлу, обрабатывается хостом от имени этого узла. Сообщение, адресованное
конкретному подключенному ресурсу, связанному с посылающим узлом, доставляется
этому node@host/resource (который МОЖЕТ отличаться от ресурса, создавшего это сообщение).
4.2 Указание отправителя
Узел МОЖЕТ указать адрес отправителя, включив атрибут 'from' в блок сообщения,
и МОЖЕТ указать любой ресурс или полный JID в этом атрибуте. Однако, хосту
НЕОБХОДИМО проверить, что данные атрибута 'from' соответствуют node@host/resource
подключенного ресурса, создавшего этот блок сообщения. Если атрибута 'from' нет,
хосту СЛЕДУЕТ добавить правильный и аутентифицированный адрес подключенного
ресурса, посылающего блок (т.е. node@host/resource).
4.3 Указание типа сообщения
Как указано в XMPP Core[2], имеется несколько предопределенных типов сообщений
(определяемых атрибутом 'type' в секции ). В контексте приложения
для обмена сообщениями, узел МОЖЕТ задать тип для указания диалогового
контекста; давая, таким образом, подсказку относительно оформления (например,
в GUI). Если тип не задан, или установлен в значение, отличное от описанных здесь,
хосту СЛЕДУЕТ установить его значение в "normal".
Атрибут 'type' СЛЕДУЕТ устанавливать в одно из следующих значений:
normal - Одиночное сообщение
chat - Сообщение отправляется в контексте двустороннего общения (chat) между двумя участниками
groupchat - Сообщение отправляется в контексте групповой конференции среди нескольких пользователей
headline - Сообщение, содержащие один из элементов списка (например, аннонсы
новостей, списки объявления)
error - Сообщение, возвращаемое отправителю, и определяющее ошибку, ассоциированную
с ранее отправленным узлом сообщением (за полным списком сообщений
об ошибках, обратитесь к XMPP Core[2]).
4.4 Задание темы сообщения
Блок сообщения МОЖЕТ содержать дочернюю секцию, определяющую тему сообщения (subject).
Тема НЕ МОЖЕТ содержать дочерних секций.
Сообщение с темой:
Imploring
Wherefore art thou, Romeo?
4.5 Задание цепочки сообщений (thread)
Блок сообщения МОЖЕТ содержать дочернюю секцию, определяющую цепочку, к которой
принадлежит сообщение, в целях отслеживания цепочки беседы. Содержимое секции
- это случайная строка, генерирумая отправителем; эта строка МОЖЕТ
быть возвращена отправителю в последующих ответах. Секции , если она есть,
НЕДОПУСТИМО иметь атрибуты и она НЕ МОЖЕТ содержать дочерние секции.
Простой обмен сообщениями с цепочками:
Art thou not Romeo, and a Montague?
283461923759234
Neither, fair saint, if either thee dislike.
283461923759234
How cam'st thou hither, tell me, and wherefore?
283461923759234
4.6 Задание тела сообщения
Блок сообщения МОЖЕТ содержать (и обычно содержит) дочернюю секцию, определяющую
тело сообщения (body). Тело сообщения НЕ МОЖЕТ содержать дочерних секций. Если
требуется посылать сообщение в альтернативной форме (например, зашифрованное,
используя инфраструктуру с открытым ключом или использовать XHTML), то ему
СЛЕДУЕТ находиться в дочерней секции от , имеющей соответстующее
пространство имен, а не в секции