matlab.net.http. Класс учетных данных

Пакет: matlab.net.http
Суперклассы: handle

Учетные данные для аутентификации запросов HTTP

Описание

Класс Credentials задает учетные данные аутентификации для отправки сообщения запроса. Задайте объект Credentials в объекте HTTPOptions.

Метод RequestMessage.send использует учетные данные, чтобы ответить на запросы аутентификации с серверов или прокси. Запрос аутентификации находится в поле заголовка AuthenticateField и задает одну или несколько схем аутентификации, которые сервер или прокси принимают, чтобы удовлетворить запрос.

Поведение зависит от схемы аутентификации. В целом MATLAB® ищет вектор объектов Credentials для того, который применяется к URI запроса и который поддерживает заданную схему аутентификации. MATLAB затем снова посылает исходный запрос с соответствующими учетными данными в заголовке AuthorizationField. Если несколько учетных данных применяются, то MATLAB использует самый определенный объект Credentials для самой сильной схемы. Если дублирующиеся объекты Credentials существуют, то MATLAB использует первый.

MATLAB только реализует схемы аутентификации Digest и Basic. Если сервер требует других схем, или вы не предоставляете учетные данные для необходимой схемы, то сообщение ответа на запрос аутентификации возвращает объект StatusCode 401 или 407. В этом случае необходимо реализовать соответствующий ответ сами.

После успешной аутентификации MATLAB сохраняет информацию в объекте Credentials. Если вы применяете эти учетные данные на последующие запросы к тому же серверу, то MATLAB не ожидает запроса аутентификации с сервера. Чтобы применить учетные данные, обеспечьте тот же объект Credentials для каждого запроса.

Объекты Credentials являются объектами указателя и внутренне накапливают информацию о предшествующих успешных аутентификациях. Поэтому можно снова использовать информацию для последующих сообщений. Если вы вставляете этот объект в несколько объектов HTTPOptions, то объект Credentials может быть обновлен после каждого использования. Если вы копируете Credentials с помощью его метода copy, то MATLAB копирует только свойства видимости, которые вы устанавливаете, а не внутреннее состояние.

Класс matlab.net.http.Credentials является классом handle.

Атрибуты класса

Изолированный

tRUE

Для получения информации об атрибутах класса см. Атрибуты класса.

Создание

Описание

пример

obj = matlab.net.http.Credentials(Name,Value) создает учетные данные HTTP с дополнительными свойствами, заданными одним или большим количеством аргументов пары "имя-значение". Name является именем свойства, и Value является соответствующим значением. Можно задать несколько аргументов пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN. Незаданные свойства установлены в свои значения по умолчанию.

Свойства

развернуть все

Схемы аутентификации для учетных данных, заданных как вектор объектов matlab.net.http.AuthenticationScheme. Значением по умолчанию является AuthenticationScheme.Basic и AuthenticationScheme.Digest. Если Scheme пуст, то учетные данные применяются ко всем схемам аутентификации.

Если Scheme установлен в Basic только, то эти учетные данные могут быть применены к запросу действительно ли аутентификация запросов к серверу. Basic - только схема избегает дополнительного цикла обработки, отвечающего на запрос аутентификации. Однако, если сервер не требует аутентификации Basic, эта схема излишне представляет свойства Username и Password серверу.

Если одной из опций является Digest или если Scheme пуст, то первое сообщение, к которому потенциально применяются эти учетные данные, отправляется без поля заголовка Авторизации. Сообщение выбрано на основе свойства Scope и URI запроса. Они Credentials используется только после сервера, отвечают проблемой и если свойства Scope и Realm совпадают с URI и проблемой сервера.

Атрибуты:

GetAccess

общественность

SetAccess

общественность

URIs, к которому учетные данные применяются, заданный как вектор объектов matlab.net.URI или строк или векторов символов. Строки должны быть приемлемы для конструктора URI или формы host/path/....

Пустое значение Scope, или пустой Host или Path в этом векторе совпадают со всеми свойствами Host или Path. Не оставляйте Scope пустым, если Scheme установлен в Basic только, если вы только доступ не доверяли серверам. Эта комбинация настроек отправляет Username и Password к любому серверу, вы получаете доступ к использованию HTTPOptions, содержащего их Credentials.

MATLAB сравнивает значения в Scope с URI сообщения запроса, чтобы определить, применяются ли эти учетные данные. Учетные данные применяются, если URI запроса относится к тому же хосту в пути в или глубже, чем один из URIs в этом Scope. Scope, содержащий URI, называющий хост без пути, применяется ко всем путям на том хосте.

Например, имя хоста mathworks.com в Scope совпадает с запросом к www.mathworks.com и anything.mathworks.com. URI mathworks.com/products/stateflow совпадает с запросом к www.mathworks.com/products/stateflow/features, но не к www.mathworks.com/products. Путь /products не в или глубже, чем /products/stateflow.

Только Host, Port и свойства Path URIs Scope используются. Обычно вы только задаете имя Host, такое как www.mathworks.com. Если вы знаете, что учетные данные необходимы только для некоторых путей в хосте, то добавьте Path или фрагмент пути.

Атрибуты:

GetAccess

общественность

SetAccess

общественность

Области аутентификации для учетных данных, заданных как массив строк, вектор символов или массив ячеек из символьных векторов, содержащий регулярные выражения, описывающие области для учетных данных. Значение по умолчанию пусто ([]), который совпадает со всеми областями. Если значение является пустой строкой, то оно только совпадает с пустым или незаданным Realm. Чтобы привязать регулярное выражение к запуску или концу аутентификации строка Realm, включайте ^ или символы $ как соответствующие.

Realm содержит текст, чтобы отобразиться так, чтобы пользователь знал что имя и пароль войти. Сервер задает Realm в AuthenticateField. Используйте Realm, когда сервер требует различных значений входа в систему для различного URIs, и вы хотите задать программно различные учетные данные для различных областей на том же сервере. Если вы запрашиваете имя и пароль, не устанавливайте это свойство. Вместо этого отобразите свойство Realm от AuthenticateField в вашей подсказке так, чтобы пользователь знал который учетные данные войти.

MATLAB сравнивает выражения в Realm против аутентификации Realm в AuthenticateField, чтобы определить, применяются ли эти учетные данные. Если MATLAB выполняет успешную аутентификацию с помощью одной из этих областей, информации о кэшах MATLAB об аутентификации в Credentials. Последующий запрос к хосту и пути, который применяется к этим Credentials, использует эту кэшируемую информацию для аутентификации. Это избегает издержек запроса аутентификации или вызова функции GetCredentialsFcn.

Атрибуты:

GetAccess

общественность

SetAccess

общественность

Имя пользователя для Basic или схем аутентификации Digest, заданных как строка или вектор символов. Если вы устанавливаете свойства Username и Password на какую-либо строку (включая пустой), то Username используется для аутентификации к любому запросу, для которого применяются эти учетные данные, если GetCredentialsFcn не задан. Если вы устанавливаете это свойство на [], то необходимо задать GetCredentialsFcn, или аутентификация не предпринята.

Атрибуты:

GetAccess

общественность

SetAccess

общественность

Пароль для Basic или схем аутентификации Digest, заданных как строка или вектор символов. Используйте свойство Password аутентифицировать любой запрос, для которого применяются эти учетные данные, если свойство GetCredentialsFcn не задано. Если значением Password является [], то никакой пароль не обеспечивается.

Атрибуты:

GetAccess

общественность

SetAccess

общественность

Функция, возвращающая Username и Password для аутентификации, заданной как указатель на функцию. MATLAB вызывает функцию GetCredentialsFcn, чтобы получить имя и пароль, чтобы использовать для ответа на запрос аутентификации. MATLAB игнорирует свойства Username или Password в Credentials.

Функциональная подпись для GetCredentialsFcn:

[username,password] = GetCredentialsFcn(cred,req,resp,authInfo,prevUsername,prevPasswd)

где аргументы заданы как:

  • cred — Обработайте к этому объекту Credentials

  • req — В последний раз отправленное сообщение запроса, которое вызвало этот запрос аутентификации.

  • resp — Сообщение ответа с сервера, содержащего AuthenticateField. Если свойство cred.Scheme установлено только в Basic, то аргумент resp может быть пустым.

  • (Дополнительный) authInfo — Один элемент в векторе объектов AuthInfo, возвращенных методом AuthenticateField.convert, который MATLAB выбирает, чтобы совпадать с этими учетными данными. Каждый объект в этом массиве имеет поля Scheme и Realm.

  • prevUsername, (дополнительный) prevPasswd — Первоначально пустые аргументы. Если установлено, эти аргументы являются значениями функция GetCredentialsFcn, возвращенная в предыдущем вызове, который не принял сервер. Если вы не запрашиваете учетные данные, то сравниваете эти значения с теми, вы планируете возвратиться. Если они - то же самое, установите username на [] указывать на ошибку аутентификации. Если вы предлагаете пользователю учетные данные, то вы не должны задавать эти аргументы.

  • username — Имя пользователя, чтобы использовать. Если сервер требует только пароля, не имени пользователя, то установленный username к пустой строке (''). Если значением username является [], то отказавшая аутентификация.

  • password — Пароль, чтобы использовать.

Путем реализации GetCredentialsFcn функционируют и оставления свойств Username и/или Password в Credentials пустыми, можно реализовать подсказку, чтобы получить эти значения от пользователя, не встраивая их в программу. В вашей подсказке отобразите URI запроса или свойство authInfo.Realm. Удобный шаблон должен установить свойство Username и запросить только пароль. Ваша подсказка может отобразить существующий Username или prevUsername, если установлено, и давать пользователю опцию, чтобы изменить его.

Функция GetCredentialsFcn может исследовать учетные данные в аргументе cred и поля заголовка в сообщениях запроса и ответа, чтобы определить, к какому ресурсу получают доступ. Таким образом функция может предложить пользователю правильные учетные данные. В целом подсказка должна отобразить authInfo.Realm, чтобы позволить пользователю знать контекст аутентификации.

Поскольку аргумент cred является указателем, функция GetCredentialsFcn хранит имя пользователя и пароль в объекте. Можно использовать тот объект в будущих запросах, не вызывая функцию снова. MATLAB сохраняет имя и пароль внутренне, чтобы применить их к будущим запросам. Однако MATLAB не может всегда мочь определить, применяется ли то же имя пользователя и пароль к различным запросам с помощью этих учетных данных.

Если аутентификация отклонена, то GetCredentialsFcn возвращает пустой массив [] (не пустая строка '') для имени пользователя. MATLAB возвращает отказ аутентификации сервера в сообщении ответа. Это поведение является соответствующим, если вы реализуете пользовательскую подсказку и пользовательскую отмену нажатий кнопки в подсказке. Если бы prevUsername и prevPasswd идентичны имени и паролю, которое вы возвратили бы, то, когда вы программно предоставляете имя и пароль, необходимо возвратить []. Это значение указывает, что ваши учетные данные не приняты, и у вас нет альтернативного выбора. В противном случае бесконечный цикл может произойти, вызывая вашу функцию GetCredentaislFcn неоднократно.

Атрибуты:

GetAccess

общественность

SetAccess

общественность

Типы данных: function_handle

Примеры

свернуть все

Создайте учетные данные, которые отправляются только в соответствующий сервер.

import matlab.net.http.Credentials
scope = URI('http://my.server.com');
creds = Credentials('Username','John','Password','secret','Scope',scope);
options = HTTPOptions('Credentials',creds);

Отправьте сообщение. Если сервер требует аутентификации, то транзакция включает обмен несколькими сообщениями.

resp = RequestMessage().send(scope,options);
...

Затем, снова используйте опции, которые содержат те же учетные данные. Поскольку учетные данные уже использовались успешно, эта транзакция требует одного сообщения.

resp = RequestMessage().send(scope,options)

Создайте функцию, которая запрашивает учетные данные, с помощью свойства Username от объекта Credentials как значение по умолчанию. MATLAB вызывает эту функцию, чтобы получить имя и пароль, чтобы использовать для ответа на запрос аутентификации.

Создайте функцию getMyCredentials.

function [u,p] = getMyCredentials(cred,req,resp,authInfo)
    u = cred.Username;
    prompt{1} = 'Username:';
    prompt{2} = 'Password:';
    defAns = {char(u), ''};
    title = ['Credentials needed for ' char(getParameter(authInfo,'realm'))];
    answer = inputdlg(prompt, title, [1, 60], defAns, 'on');
    if isempty(answer)
        u = [];
        p = [];
    else
        u = answer{1};
        p = answer{2};
    end
end

Создайте сообщение запроса.

cred = matlab.net.http.Credentials('GetCredentialsFcn',@getMyCredentials);
options = matlab.net.http.HTTPOptions('Credentials',cred);
req = matlab.net.http.RequestMessage;

Отправьте сообщение в httpbin.org.

uri = 'httpbin.org/basic-auth/user/passwd';
resp = req.send(uri,options)

Введите любой текст. Чтобы выйти, выберите Cancel.

Введенный в R2017b