Перейти к содержимому

Операции с данными в памяти устройств

USB-токены и смарт-карты JaCartaAPI и SDKUSB-токены и смарт-карты JaCarta

Существует два типа хранимых объектов:

  1. Общедоступные объекты.
    • Чтение или получение информации такого объекта доступно всем пользователям без предъявления PIN (любое состояние аутентификации).
    • Изменение, запись или удаление требует предъявления PIN-кода пользователя (состояние аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded).
    1. Защищённые объекты.
    • Чтение или получение информации такого объекта доступно только пользователям, предъявившим PIN (состояние аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded).
    • Изменение, запись или удаление требует предъявления PIN-кода пользователя (состояние аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded).

Для записи данных в память устройства используются команды:

  • storeBinaryData - запись данных в общедоступную или защищенную области памяти;
  • modifyBinaryObject - изменения объекта двоичных данных.

Пример записи общедоступного и защищенного объектов

// Идентификатор токена
var tokenID = 0;
// Предъявить PIN-код
JCWebClient2.bindToken({
args: {
tokenID: tokenID,
pin: 'my pin'
}
});
// Записать данные в защищённую область памяти
var privateData = 'my private data',
privateDataLabel = 'Private data';
var privateDataID = JCWebClient2.storeBinaryData({
args: {
data: $utf8.encode(privateData),
label: privateDataLabel,
isPrivate: true
}
});
// Записать данные в общедоступную область памяти
var data = 'my data',
dataLabel = 'Data';
var dataID = JCWebClient2.storeBinaryData({
args: {
data: $utf8.encode(data),
label: dataLabel,
isPrivate: false
}
});
// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

Получение списка всех объектов, хранящихся на устройстве

Заголовок раздела «Получение списка всех объектов, хранящихся на устройстве»

Для получения списка всех хранящихся на устройстве объектов используется команда getBinaryObjectList. Команда возвращает разный набор данных, в зависимости от того какие данные хранятся на устройстве (общедоступные или *защищенные) и текущего состояния аутентификации.

Пример получения данных при состоянии аутентификации JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;
// Для примера проверим если было выполнено предъявление PIN-кода, отменить авторизацию
if (JCWebClient2.getLoggedInState().state != JCWebClient2.Vars.AuthState.notBinded) {
JCWebClient2.unbindToken();
}
// Получить список всех объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
args: {
tokenID: tokenID
}
});
// Проверка наличия защищенного объекта в полученном списке
var privateDataFound = dataObjects.find(function(element) {
return element.label == privateDataLabel && element.isPrivate == true;
});
// Проверка наличия общедоступного объекта в полученном списке
var dataFound = dataObjects.find(function(element) {
return element.label == dataLabel && element.isPrivate == false;
});
console.log('privateDataFound: ' + privateDataFound);
console.log('dataFound: ' + dataFound);
// ----- Результат -----
// privateDataFound: false
// dataFound: true

Пример получения данных при состоянии аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;
// Предъявить PIN-код
JCWebClient2.bindToken({
args: {
tokenID: tokenID,
pin: 'my pin'
}
});
// Получить список всех объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
args: {
tokenID: tokenID
}
});
// Проверка наличия защищенного объекта в полученном списке
var privateDataFound = dataObjects.find(function(element) {
return element.label == privateDataLabel && element.isPrivate == true;
});
// Проверка наличия общедоступного объекта в полученном списке
var dataFound = dataObjects.find(function(element) {
return element.label == dataLabel && element.isPrivate == false;
});
// Отменить ввод PIN-кода
JCWebClient2.unbindToken();
console.log('privateDataFound: ' + privateDataFound);
console.log('dataFound: ' + dataFound);
// ----- Результат -----
// privateDataFound: true
// dataFound: true

Для считывания данных используется команда readBinaryObject.

Пример считывания данных при состоянии аутентификации JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;
// Для примера проверим если было выполнено предъявление PIN-кода, отменить авторизацию
if (JCWebClient2.getLoggedInState().state != JCWebClient2.Vars.AuthState.notBinded) {
JCWebClient2.unbindToken();
}
// Получить список объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
args: {
tokenID: tokenID
}
});
// Считать данные из объекта из списка, полученного из getBinaryObjectList
dataObjects.forEach(function(element) {
var binData = JCWebClient2.readBinaryObject({
args: {
tokenID: tokenID,
objectID: element.id
}
});
console.log(element.label + ': ' + $utf8.decode(binData));
});
// ----- Результат -----
// Data: my data

Пример считывания данных при состоянии аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;
// Предъявить PIN-код
JCWebClient2.bindToken({
args: {
tokenID: tokenID,
pin: 'my pin'
}
});
// Получить список объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
args: {
tokenID: tokenID
}
});
// Считать данные из объекта из списка, полученного из getBinaryObjectList
dataObjects.forEach(function(element) {
var binData = JCWebClient2.readBinaryObject({
args: {
tokenID: tokenID,
objectID: element.id
}
});
console.log(element.label + ': ' + $utf8.decode(binData));
});
// Отменить ввод PIN-кода
JCWebClient2.unbindToken();
// ----- Результат -----
// Private data: my private data
// Data: my data

Для удаления объекта данных из памяти устройства используется команда deleteBinaryObject.

Пример удаления всех объектов, хранящихся на устройстве

// Идентификатор токена
var tokenID = 0;
// Предъявить PIN-код
JCWebClient2.bindToken({
args: {
tokenID: tokenID,
pin: 'my pin'
}
});
// Получить список объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
args: {
tokenID: tokenID
}
});
// Удалить объект из списка, полученного из getBinaryObjectList
dataObjects.forEach(function(element) {
JCWebClient2.deleteBinaryObject({
args: {
objectID: element.id
}
});
console.log(element.label + ' was deleted');
});
// Отменить ввод PIN-кода
JCWebClient2.unbindToken();
// ----- Результат -----
// Private data was deleted
// Data was deleted