Ссылка плагина авторизации
API Плагина Авторизации позволяет Вам создать плагины, которые могут участвовать в решениях об авторизации.
Плагины авторизации являются доступным запуском в OS X v10.4.
Необходимо считать этот документ, если необходимо расширить службы авторизации OS X, чтобы выполнить полномочия по-новому или проводить новую политику, которая слишком сложна, чтобы быть реализованной полностью с базой данных политики авторизации.
Организация этого документа
Этот документ состоит из введения и ссылки на плагин авторизации API. Это содержит следующие разделы:
Об Авторизации Плагины дают краткое введение в цель и использование плагинов авторизации и дают исходные команды для установки той.
Функции Плагина авторизации описывают функции, которые Ваш плагин может вызвать для передачи с механизмом авторизации. Вы используете эти функции, чтобы установить и получить данные и сообщить о состоянии Вашего плагина.
Функции, Реализованные Плагином, описывают функции, которые должны быть реализованы Вашим плагином. Эти функции вызваны механизмом авторизации, чтобы установить плагин, реализовать и выполнить механизмы авторизации плагина, и деактивировать или удалить плагин.
Типы данных Плагина авторизации описывают структуры и другие типы данных, определенные в
AuthorizationPlugin.h
.Константы Плагина авторизации описывают константы, определенные в
AuthorizationPlugin.h
.Коды Результата Плагина авторизации перечисляют коды результата, используемые плагинами авторизации.
См. также
Для получения дополнительной информации о службах авторизации OS X, см. следующие документы:
Руководство по программированию Authorization Services, описывающее службы авторизации и несколько компонентов служб авторизации, таких как база данных политики авторизации и Сервер безопасности. Этот документ также обеспечивает некоторый пример кода.
Ссылка Authorization Services, описывающая Authorization Services API.
О плагинах авторизации
Для установки плагина авторизации Вы пишете плагин с помощью API, описанного в этом документе, устанавливаете пакет в /System/Library/CoreServices/SecurityAgentPlugins
, и используйте AuthorizationRightSet
функция для добавления записи в базу данных политики авторизации это ссылается на плагин. База данных политики авторизации содержит ряд правил что использование Сервера безопасности для авторизации прав для пользователя. Большинство правил непосредственно указывает критерии, чтобы позволить или запретить доступа; однако, некоторый ссылочный внешний код (называемый механизмами авторизации), которые определяют поведение. База данных авторизации описана в разделе Policy Database Руководства по программированию Authorization Services. Для вызова плагина Вы передаете имя записи базы данных что ссылки тот плагин в rights
параметр AuthorizationCopyRights
функция.
Типичное использование для плагинов авторизации должно проводить политику, не включенную в стандартную конфигурацию авторизации. Например, Вы могли записать плагин, разрешающий пользователя отправлять факс путем требования персонального идентификационного номера (PIN) для определенного факса.
Основная точка входа плагина должна быть функцией AuthorizationPluginCreate
, который обменивается интерфейсом плагина (AuthorizationPluginInterface
) и интерфейс авторизации Сервера безопасности (AuthorizationCallbacks
).
Когда Вы добавляете политику к базе данных политики авторизации, это может относиться к любому числу плагинов. Каждый плагин включает один или несколько механизмов авторизации, где механизм является модулем кода, выполняющим один шаг в процессе авторизации.
Например, если бы Вы записали политику для отправки факсов, потребовавших, чтобы пользователи выбрали факс, они хотели использовать и ввести PIN-код для той машины, то Вы могли бы назвать политику com.ifoo.ifax.send
. Для проведения политики Вы могли записать вызванный плагин SendFaxPlugin
это содержит два механизма: SelectFaxMachine
и GetUserPIN
. Вы добавили бы свой сменный код к папке /System/Library/CoreServices/SecurityAgentPlugins
поскольку пакет вызывают SendFaxPlugin.bundle
и Вы использовали бы AuthorizationRightSet
функция для добавления строк, показанных в Перечислении 1 базе данных политики авторизации:
<key>com.ifoo.ifax.send</key>
<dict>
<key>class</key>
<string>evaluate-mechanisms</string>
<key>comment</key>
<string>Rule to evaluate whether user has right to
use a specific fax machine.
</string>
<key>mechanisms</key>
<array>
<string>SendFaxPlugin:SelectFaxMachine</string>
<string>SendFaxPlugin:GetUserPIN</string>
</array>
</dict>
Заметьте, что каждый плагин идентифицируется именем плагина, двоеточия и имени механизма; например, SendFaxPlugin:SelectFaxMachine
где SelectFaxMachine
механизм в плагине SendFaxPlugin
Ключи.The, используемые в словарной статье, перечислены в файлах AuthorizationTags.h
и AuthorizationTagsPriv.h
. (Обратите внимание на то, что AuthorizationTagsPriv.h
не часть общедоступного API. Apple сохраняет право изменить этот файл или его содержание с будущими выпусками.)
Сервер безопасности загружает плагины в отдельный процесс — сменный узел — для изоляции процесса авторизации от клиента. Существует два сменных узла:
Каждый работает как анонимный пользователь и может использоваться, чтобы связаться с пользователем, например попросить пароль.
Каждый работает с полномочиями пользователя root выполнить привилегированные операции.
В этом документе часть Сервера безопасности, имеющего дело с авторизацией и аутентификацией, вместе со сменными узлами, упоминается как механизм авторизации.
Для выполнения определенного механизма с полномочиями пользователя root добавьте запятую и слово privileged
к имени механизма; например:
<string>SendFaxPlugin:ChangeUserPIN,privileged</string>
Когда механизму авторизации нужно решение об авторизации на основе политики, принадлежащей плагину, механизм авторизации вызывает каждый механизм, принадлежащий той политике, в свою очередь, в порядке, они перечислены в базе данных правил управления. Для каждого механизма механизм авторизации вызывает плагин MechanismInvoke
функция, передавая плагин name:mechanism называет для того механизма.
Механизм вызывает SetResult
функционируйте для создания отчетов о решении об авторизации. Механизм авторизации не считает авторизацию завершенной и утвержденной, пока все механизмы не возвратили положительное (kAuthorizationResultAllow
) решение об авторизации, один из механизмов возвратил отрицание (kAuthorizationResultDeny
) решение, максимальное количество повторений было достигнуто (kAuthorizationResultUndefined
), или пользователь отменил попытку (kAuthorizationResultUserCanceled
).
Механизмы в авторизации могут передать вспомогательную информацию путем установки и получения данных контекста и подсказок. Подсказки являются значениями данных для использования во время авторизации; например, можно использовать подсказку для передачи промежуточного значения с одного механизма на последующий механизм. Они не сохраняются как часть результата авторизации. Данные контекста являются информацией, которая может быть полезной для приложения, такой как имя пользователя, вводимое пользователем во время процесса авторизации. Данные контекста могут быть добавлены, читать, или измененный каждым механизмом в авторизации и сохраняются Сервером безопасности. Данные контекста могут также быть сделаны доступными для клиента авторизации после того, как авторизация будет завершена. Посмотрите SetHintValue
и SetContextValue
для получения дополнительной информации о подсказках и данных контекста.
Когда плагин авторизации устанавливает данные контекста, он тегирует данные с флагом, указывающим, должна ли информация быть возвращена клиенту авторизации по запросу (при помощи AuthorizationCopyInfo
функция) или ограничивается ли это механизмами, вовлеченными в авторизацию.
Ваш плагин авторизации связывается с механизмом авторизации через функции обратного вызова механизма. Эти функции объявляются в AuthorizationCallbacks
структура передала Вашему плагину через AuthorizationPluginCreate
функция.
-
Возвратите результат операции авторизации.
Объявление
Objective C
OSStatus (*SetResult)( AuthorizationEngineRef inEngine, AuthorizationResult inResult );
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.inResult
Результат попытки авторизации. Посмотрите Результат Авторизации для возможных значений.
Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Когда приложение вызывает
AuthorizationCopyRights
функционируйте для запроса определенного права авторизации, Агент безопасности ищет то право в базе данных политики авторизации. Если то право соответствует Вашему плагину, механизм авторизации вызываетMechanismInvoke
функция для каждого механизма перечислена в базе данных правил управления для Вашего плагина.Когда механизм авторизации вызывает Ваш
MechanismInvoke
функция, Ваш плагин должен вызвать указанный механизм для попытки операции авторизации. Вы используетеSetResult
функционируйте для возврата результатов этой работы. Если возвращается механизмkAuthorizationResultAllow
, тогда механизм авторизации вызывает следующий механизм (если таковые имеются) указанный в базе данных политики авторизации для политики. Если какой-либо из механизмов сообщает о результате кромеkAuthorizationResultAllow
, сбои попытки авторизации. Если все механизмы сообщают о результатахkAuthorizationResultAllow
, авторизация, как полагают, успешно выполнилась.Обратите внимание на то, что можно отделить отдельный процесс и возвратиться из
MechanismInvoke
перед вызовомSetResult
. Например, Вы могли бы сделать так, чтобы избежать блокировать Сервер безопасности, если Ваш механизм занимает существенное количество времени для завершения или если Вы хотите быть в состоянии отменить работу путем вызоваRequestInterrupt
функция (если, например, пользователь нажал Cancel).In, что случай, Ваш отдельный процесс должен вызватьSetResult
функционируйте для создания отчетов о результате; механизм авторизации не вызывает следующий механизм, пока Вы не делаете так.Механизм авторизации отправляет Вам точку входа в
SetResult
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Доступность
Доступный в OS X v10.4 и позже.
-
Запросите механизм авторизации прервать в настоящее время активный механизм авторизации.
Объявление
Objective C
OSStatus (*RequestInterrupt)( AuthorizationEngineRef inEngine, );
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Когда Вы вызываете эту функцию, механизм безопасности вызывает
MechanismDeactivate
функционируйте для в настоящее время активного механизма своего плагина; т.е. механизм, в последний раз вызванный и это еще не вызвалоSetResult
функционируйте для создания отчетов о его результате. Ваш механизм должен тогда остановить любую активную обработку и вызватьDidDeactivate
функция. Когда все механизмы неактивны (т.е. они вызвали такжеSetResult
илиDidDeactivate
), механизм авторизации вызываетMechanismInvoke
функция для вызвавшего механизмаRequestInterrupt
так, чтобы это могло возобновить процесс авторизации от той точки. После того, как все механизмы вызвалиSetResult
, механизм авторизации вызывает каждый механизмMechanismDestroy
функция.Если Ваш механизм отделяет отдельный процесс или поток UI, тот поток может вызвать
RequestInterrupt
функция, чтобы повторно вызвать механизм, даже если тот механизм уже вызвалSetResult
функция. Например, если Ваш плагин реализует метод аутентификации смарт-карты, читение и оценивание карты могли бы занять несколько минут для выполнения. Поэтому во избежание блокирования другой обработки, в то время как карта оценивается, Вы могли бы отделить поток UI, чтобы взаимодействовать с пользователем и затем возвратиться изMechanismInvoke
. Когда карта была считана, поток UI вызываетSetResult
функция со значениемkAuthorizationResultAllow
и изменяет UI для запроса PIN пользователя. Механизм авторизации вызывает следующий механизм, проверяющий PIN. Если пользователь вытаскивает карту, прежде чем проверка будет завершена, поток UI может вызватьRequestInterrupt
. Механизм авторизации тогда вызывает активный механизмMechanismDeactivate
функция, заставляя его завершить проверку PIN и вызовDidDeactivate
. Тогда механизм авторизации вызывает Ваш механизм UIMechanismInvoke
функционируйте снова. Ваш UI может тогда предложить пользователю повторно вставлять карту.Для понимания этой последовательности лучше предположите, что плагин содержит три механизма: A, B, и C. Механизм A вызвал
SetResult
и не имеет никаких активных процессов. Механизм B вызвалSetResult
, но все еще имеет выполнение потока UI. Механизм C выполняет и еще не вызвалSetResult
. Пользователь нажимает Cancel или иначе прерывает поток UI, заставляя поток UI вызватьRequestInterrupt
функция. Следующая последовательность событий происходит:Механизм авторизации вызывает механизм C
MechanismDeactivate
функция.Механизм C останавливает активную обработку и вызывает
DidDeactivate
функция.Механизм авторизации вызывает механизм B
MechanismInvoke
функция (потому что механизм B является вызвавшим темRequestInterrupt
).Механизм B обновляет UI и вызывает
SetResult
функция со значениемkAuthorizationResultAllow
.Механизм авторизации вызывает механизм C
MechanismInvoke
функция.Механизм C завершает обработку и вызовы
SetResult
сkAuthorizationResultAllow
.Механизм авторизации вызывает
MechanismDestroy
функция каждого механизма поочередно (A, B, тогда C).
Механизм авторизации отправляет Вам точку входа в
RequestInterrupt
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Доступность
Доступный в OS X v10.4 и позже.
-
Сообщите об успешной деактивации механизма авторизации.
Объявление
Objective C
OSStatus (*DidDeactivate)( AuthorizationEngineRef inEngine, );
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Необходимо вызвать эту функцию после деактивации механизма авторизации в ответ на вызов к Вашему
MechanismDeactivate
функция. Механизм авторизации ожидает подтверждения, что все механизмы деактивировались перед продолжением.Механизм авторизации отправляет Вам точку входа в
DidDeactivate
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Доступность
Доступный в OS X v10.4 и позже.
-
Считайте значение, собранное во время авторизации.
Объявление
Objective C
OSStatus (*GetContextValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, AuthorizationContextFlags *outContextFlags, const AuthorizationValue **outValue);
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.inKey
Ключ, указывающий, какое значение Вы хотите получить. Этот ключ должен соответствовать тому, который Вы указали, когда Вы использовали
SetContextValue
функционируйте для хранения значения контекста.outContextFlags
На выходных точках к флагу, указывающему, доступно ли это значение клиенту авторизации.
outValue
На вводе выделите указатель на
AuthorizationValue
структура. На выводе структура содержит размер данных и указателя на данные. Поскольку ВашAuthorizationValue
структуре не принадлежат данные, Вы не должны освобождать структуру или данные, на которые указывает структура.Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Ваш сменный механизм авторизации мог бы собрать данные, такие как имя пользователя и другая информация аутентификации во время оценки авторизации. Можно использовать
SetContextValue
функция для имения Сервера безопасности хранит эти данные иGetContextValue
функция для получения его.Механизм авторизации отправляет Вам точку входа в
GetContextValue
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Не вызывайте эту функцию после вызова
SetResult
функция. Если Вы делаете так, полученные данныеGetContextValue
функция не могла бы отразить текущую стоимость даже при том, что функция возвращаетсяerrAuthorizationSuccess
код результата.Доступность
Доступный в OS X v10.4 и позже.
-
Храните данные, собранные во время авторизации как пара ключ/значение.
Объявление
Objective C
OSStatus (*SetContextValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, AuthorizationContextFlags inContextFlags, const AuthorizationValue *inValue);
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.inKey
Ключ, идентифицирующий значение, Вы храните. Для стандартных значений, таких как имена пользователей, используйте ключи, перечисленные в
DirectoryService/DirServicesConst.h
. Если необходимо определить новый ключ, используйте обратную доменную нотацию (такой какcom.apple.ifoo
) и удостоверьтесь, что ключ уникален. Например, можно использовать название компании в качестве префикса для ключевого имени.inContextFlags
Флаг, указывающий, должно ли это значение быть доступно клиенту авторизации.
inValue
Указатель на
AuthorizationValue
структура, содержащая размер данных контекста и указателя на данные. И структура и данные копируются в контекст, сохраняемый Сервером безопасности.Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Ваш сменный механизм авторизации собирает данные, такие как имя пользователя и другая информация аутентификации во время оценки авторизации. Можно использовать эту функцию для имения Сервера безопасности, хранят эти данные и
GetContextValue
функция для получения его.Когда Вы храните эти данные контекста, Вы отмечаете их, чтобы указать, может ли клиент авторизации получить значение с
AuthorizationCopyInfo
функция. Если данные установлены быть извлекаемыми (kAuthorizationContextFlagExtractable
), для клиента авторизации возможно использоватьAuthorizationCopyInfo
функция для получения значения. Если данные отмечены как энергозависимые (kAuthorizationContextFlagVolatile
), значение не доступно клиенту. В любом случае уязвимые данные, такие как пароль пользователя не предоставлены клиенту.Механизм авторизации отправляет Вам точку входа в
SetContextValue
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Не вызывайте эту функцию после вызова
SetResult
функция. Если Вы делаете так, функция не устанавливает данные контекста, даже при том, что функция возвращаетсяerrAuthorizationSuccess
код результата.Доступность
Доступный в OS X v10.4 и позже.
-
Считайте значение, сохраненное сменным механизмом авторизации.
Объявление
Objective C
OSStatus (*GetHintValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, const AuthorizationValue **outValue);
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.inKey
Ключ, указывающий, какое значение Вы хотите получить. Этот ключ должен соответствовать тому, который Вы указали, когда Вы использовали
GetHintValue
функционируйте для хранения значения подсказки.outValue
На вводе выделите указатель на
AuthorizationValue
структура. На выводе структура содержит размер данных и указателя на данные. Поскольку ВашAuthorizationValue
структуре не принадлежат данные, Вы не должны освобождать структуру или данные, на которые указывает структура.Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Ваш сменный механизм авторизации может сохранить и получить вспомогательную информацию — названный подсказками — для использования последующими механизмами, которые являются частью той же авторизации. Вы используете
SetHintValue
функция для имения Сервера безопасности хранит эти данные иGetHintValue
функция для получения его. Подсказки не сохраняются как часть результата авторизации; как только все механизмы утвердили авторизацию, или любой механизм отклонил ее, механизм безопасности избавляется от подсказок.Механизм авторизации отправляет Вам точку входа в
GetHintValue
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Не вызывайте эту функцию после вызова
SetResult
функция. Если Вы делаете так, полученные данныеGetHintValue
функция не могла бы отразить текущую стоимость даже при том, что функция возвращаетсяerrAuthorizationSuccess
код результата.Доступность
Доступный в OS X v10.4 и позже.
-
Храните данные, необходимые во время авторизации как пара ключ/значение.
Объявление
Objective C
OSStatus (*SetHintValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, const AuthorizationValue *inValue);
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.inKey
Ключ, идентифицирующий значение, Вы храните. Для стандартных значений, таких как метка времени, используйте ключи, перечисленные в
DirectoryService/DirServicesConst.h
. Если необходимо определить новый ключ, удостоверьтесь, что ключ уникален. Например, можно использовать название компании в качестве префикса для ключевого имени.inValue
Указатель на
AuthorizationValue
структура, содержащая размер данных и указателя на данные. И структура и данные копируются в хранение, сохраняемое механизмом авторизации.Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Ваш сменный механизм авторизации может сохранить и получить вспомогательную информацию — названный подсказками — для использования последующими механизмами, которые являются частью той же авторизации. Вы используете
SetHintValue
функция для имения Сервера безопасности хранит эти данные иGetHintValue
функция для получения его. Подсказки не сохраняются как часть результата авторизации; как только все механизмы утвердили авторизацию, или любой механизм отклонил ее, механизм безопасности избавляется от подсказок.Механизм авторизации отправляет Вам точку входа в
SetHintValue
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Не вызывайте эту функцию после вызова
SetResult
функция. Если Вы делаете так, функция не устанавливает данные подсказки, даже при том, что функция возвращаетсяerrAuthorizationSuccess
код результата.Доступность
Доступный в OS X v10.4 и позже.
-
Считайте параметры за этот механизм авторизации от базы данных политики авторизации. Параметры базы данных политики авторизации еще не были реализованы.
Объявление
Objective C
OSStatus (*GetArguments)( AuthorizationEngineRef inEngine, const AuthorizationValueVector **outArguments);
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.outValue
На вводе выделите указатель на
AuthorizationValueVector
структура. На выводе структура содержит число параметров и указателя на данные. Поскольку ВашAuthorizationValueVector
структуре не принадлежат данные, Вы не должны освобождать структуру или данные, на которые указывает структура.Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
База данных политики авторизации могла бы содержать параметры за каждый механизм аутентификации. Можно использовать эту функцию для получения этих параметров.
Механизм авторизации отправляет Вам точку входа в
GetArguments
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Доступность
Эта функция доступна в OS X v10.4 и позже; однако, база данных еще не поддерживает параметры.
-
Считайте сеанс ID.
Объявление
Objective C
OSStatus (*GetSessionID)( AuthorizationEngineRef inEngine, AuthorizationSessionId *outSessionId);
Параметры
inEngine
Непрозрачный дескриптор, передающийся Вашему плагину, когда механизм авторизации вызывает Ваш
MechanismCreate
функция.outSessionId
На выводе, точках к сеансу ID.
Возвращаемое значение
Код результата. Возможные результаты
errAuthorizationSuccess
(никакая ошибка) иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка).Обсуждение
Сеанс ID является уникальным значением, предоставленным механизмом авторизации для данного сеанса авторизации. Обычно, все механизмы в Вашем плагине вызывают поочередно для данного сеанса авторизации и нет никакой потребности попросить сеанса у ID. Однако, если необходимо было запустить демона авторизации (например), что данные кэшей от различных сеансов авторизации, и затем использует те данные позже, Вы, возможно, должны были бы отслеживать, которого сеанса элемент определенных данных прибыл из. Если Вы хотите реализовать такую систему, ID сеанса доступен для Вашего использования.
Механизм авторизации отправляет Вам точку входа в
GetSessionID
функция вAuthorizationCallbacks
структура, когда Вы вызываетеAuthorizationPluginCreate
функция.Доступность
Доступный в OS X v10.4 и позже.
-
Инициализирует плагин и обменивается интерфейсами с механизмом авторизации.
Объявление
Objective C
OSStatus AuthorizationPluginCreate ( const AuthorizationCallbacks *callbacks, AuthorizationPluginRef *outPlugin, const AuthorizationPluginInterface **outPluginInterface );
Параметры
callbacks
Указатель на структуру, содержащую точки входа к Серверу безопасности. Функции в этом интерфейсе описаны в Вызове Механизма Авторизации.
outPlugin
На вводе, указатель, который можно присвоить, на выводе, к ссылочному значению, которое Вы определяете. Механизм авторизации пасует назад эту ссылку на Вас в любых последующих вызовах к Вашим функциям
outPluginInterface->MechanismCreate
(MechanismCreate
) иoutPluginInterface->PluginDestroy
(MechanismDestroy
) так, чтобы можно было идентифицировать экземпляр затронутого плагина.outPluginInterface
На вводе, указатель, который Вы присваиваете, на выводе, к структуре, содержащей точки входа в плагине. Эта структура остается допустимой до вызовов механизма авторизации
outPluginInterface->PluginDestroy
.Возвращаемое значение
Код результата. Возвратиться
errAuthorizationSuccess
(никакая ошибка), если функция завершается успешно иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка), если происходит ошибка.Обсуждение
Эта функция является основной точкой входа к плагину. Механизм авторизации вызывает эту функцию только один раз. Плагин получает структуру (
AuthorizationCallbacks
) содержа точки входа к функциям Сервера безопасности (описанный в Вызове Механизма Авторизации) и возвраты структура (AuthorizationPluginInterface
) содержа точки входа ко всем подпрограммам плагина (Функции интерфейса Плагина Авторизации). Обе из этих структур содержат номера версий. Механизм авторизации соответствует версию своего интерфейса к версии в Вашем плагинеAuthorizationPluginInterface
структура, чтобы гарантировать, что более старые плагины будут продолжать функционировать правильно после Сервера безопасности, обновляется.Если Ваш плагин работает в OS X v10.5 или позже и выводит на экран окно, прежде чем пользователь вошел в систему, необходимо установить
kHIWindowBitCanBeVisibleWithoutLogin
флаг на окне.Для какао,
NSWindow
метод, чтобы сделать это:- (void)setCanBecomeVisibleWithoutLogin:(BOOL)flag;
Этот метод доступен в OS X v10.5 и позже; см. Ссылку класса NSWindow.
Для Углерода Вы устанавливаете
kHIWindowBitCanBeVisibleWithoutLogin
припишите непосредственно; посмотрите Ссылку Менеджера окон. Этот атрибут также поддерживаетсяIBCarbonRuntime
и при архивации окна.Доступность
Доступный в OS X v10.4 и позже.
Необходимо объявить и реализовать функции, упомянутые в AuthorizationPluginInterface
структура, которую Вы передаете механизму авторизации с AuthorizationPluginCreate
функция.
-
Уведомляет плагин, что он собирается быть разгруженным.
Объявление
Objective C
OSStatus (*PluginDestroy)( AuthorizationPluginRef inPlugin );
Параметры
inPlugin
Ссылка плагина авторизации Вы присвоились к плагину в
AuthorizationPluginCreate
функция.Возвращаемое значение
Код результата. Возвратиться
errAuthorizationSuccess
(никакая ошибка), если функция завершается успешно иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка), если происходит ошибка.Обсуждение
Когда эта функция вызвана, Ваш плагин должен высвободить любые средства, которые это содержит, и сделайте любую другую необходимую очистку (такую как удаление временных файлов), прежде чем это будет разгружено.
Доступность
Доступный в OS X v10.4 и позже.
-
Создайте механизм авторизации.
Объявление
Objective C
OSStatus (*MechanismCreate)( AuthorizationPluginRef inPlugin, AuthorizationEngineRef inEngine, AuthorizationMechanismId mechanismId, AuthorizationMechanismRef *outMechanism );
Параметры
inPlugin
Ссылка плагина авторизации Вы присвоились к плагину в
AuthorizationPluginCreate
функция.inEngine
Непрозрачный дескриптор, который необходимо пасовать назад к механизму авторизации при вызове одной из функций обратного вызова механизма.
mechanismID
ID механизма, указанный в базе данных политики авторизации, передается плагину так, чтобы плагин мог создать надлежащий механизм.
outMechanism
На выводе, точках к ссылке механизма авторизации, что Вы определяете. Механизм авторизации включает эту ссылку, когда это вызывает Ваш плагин так, чтобы можно было идентифицировать, который экземпляр механизма вызвать, деактивируйтесь или уничтожьте.
Возвращаемое значение
Код результата. Возвратиться
errAuthorizationSuccess
(никакая ошибка), если функция завершается успешно иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка), если происходит ошибка.Обсуждение
Данный плагин авторизации может реализовать любое число механизмов авторизации, которые отличают их имена механизма в базе данных политики авторизации. Для примера см. Перечисление 1.
Когда механизм авторизации вызывает Ваш
MechanismCreate
функция, необходимо создать механизм типа, указанногоmechanismID
параметр и возврат ссылка механизма авторизации. Впоследствии, механизм авторизации может вызвать ВашMechanismInvoke
функция для выполнения авторизации, или может направить Вас, чтобы деактивировать или уничтожить экземпляр механизма путем вызова ВашегоMechanismDeactivate
илиMechanismDestroy
функции.Доступность
Доступный в OS X v10.4 и позже.
-
Вызовите механизм авторизации для выполнения операции авторизации.
Объявление
Objective C
OSStatus (*MechanismInvoke)( AuthorizationMechanismRef inMechanism );
Параметры
inMechanism
Ссылка механизма авторизации, которую Вы возвратили когда Ваш
MechanismCreate
функция была вызвана для создания механизма.Возвращаемое значение
Код результата. Возвратиться
errAuthorizationSuccess
(никакая ошибка), если функция завершается успешно иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка), если происходит ошибка.Обсуждение
Когда механизм авторизации вызывает Ваш
MechanismInvoke
функция, необходимо выполнить операцию авторизации, обозначенную ссылкой механизма. Можно использовать функцииGetArguments
,GetContextValue
, иGetHintValue
получить больше информации, если таковые имеются, об авторизации.Доступность
Доступный в OS X v10.4 и позже.
-
Деактивируйте механизм авторизации.
Объявление
Objective C
OSStatus (*MechanismDeactivate)( AuthorizationMechanismRef inMechanism );
Параметры
inMechanism
Ссылка механизма авторизации, которую Вы возвратили когда Ваш
MechanismCreate
функция была вызвана для создания механизма.Возвращаемое значение
Код результата. Возвратиться
errAuthorizationSuccess
(никакая ошибка), если функция завершается успешно иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка), если происходит ошибка.Обсуждение
Механизм авторизации вызывает
MechanismDeactivate
функция каждого активного механизма, когда Вы вызываетеRequestInterrupt
функция. Для деактивации механизма необходимо остановить любую обработку, которая является в настоящее время в стадии реализации; например, необходимо завершить любые потоки или процессы UI, которые Вы инициировали.После завершения всей обработки необходимо вызвать
DidDeactivate
функция; механизм авторизации ожидает Вас для вызывания этой функции, прежде чем это возобновит работу.Доступность
Доступный в OS X v10.4 и позже.
-
Уничтожьте механизм авторизации.
Объявление
Objective C
OSStatus (*MechanismDestroy)( AuthorizationMechanismRef inMechanism );
Параметры
inMechanism
Ссылка механизма авторизации, которую Вы возвратили когда Ваш
MechanismCreate
функция была вызвана для создания механизма.Возвращаемое значение
Код результата. Возвратиться
errAuthorizationSuccess
(никакая ошибка), если функция завершается успешно иerrAuthorizationInternal
(Сервер безопасности внутренняя ошибка), если происходит ошибка.Обсуждение
Когда механизм авторизации вызывает Ваш
MechanismDestroy
функция, необходимо высвободить все средства, принадлежавшие механизму, и сделать любую другую необходимую очистку (такую как удаление временных файлов).Доступность
Доступный в OS X v10.4 и позже.
-
Используемый для передачи данных между механизмом авторизации и сменным механизмом.
Объявление
Objective C
typedef struct AuthorizationValue { UInt32 length; void *data; } AuthorizationValue;
Доступность
Доступный в OS X v10.4 и позже.
-
Используемый для передачи параметров с базы данных политики авторизации на механизм авторизации.
Объявление
Objective C
typedef struct AuthorizationValueVector { UInt32 count; AuthorizationValue *values; } AuthorizationValueVector;
Доступность
Доступный в OS X v10.4 и позже.
-
Механизм ID, указанный в базе данных политики авторизации, передается плагину для создания надлежащего механизма.
Объявление
Objective C
typedef const AuthorizationString AuthorizationMechanismId;
Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.4 и позже.
-
Дескриптор, переданный плагином механизму авторизации, когда инициируется плагин.
Объявление
Objective C
typedef void *AuthorizationPluginRef;
Обсуждение
Ваш
AuthorizationPluginCreate
функция присваивает это значение и возвращает его механизму авторизации. Механизм авторизации пасует назад эту ссылку на Вас в любых последующих вызовах к ВашемуMechanismCreate
иPluginDestroy
функции.Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.4 и позже.
-
Дескриптор, переданный плагином механизму авторизации при создании экземпляра механизма.
Объявление
Objective C
typedef void *AuthorizationMechanismRef;
Обсуждение
Ваш
MechanismCreate
функция присваивает это значение и возвращает его механизму авторизации. Механизм авторизации пасует назад эту ссылку на Вас в любых последующих вызовах к ВашемуMechanismInvoke
,MechanismDeactivate
, иMechanismDestroy
функции.Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.4 и позже.
-
Дескриптор передал от механизма авторизации до экземпляра механизма в плагине.
Объявление
Objective C
typedef struct __OpaqueAuthorizationEngine *AuthorizationEngineRef;
Обсуждение
Механизм авторизации передает один из этих непрозрачных дескрипторов к Вашему плагину, когда это вызывает Ваш
MechanismCreate
функция. Ваш механизм должен пасовать назад этот дескриптор к механизму авторизации при вызове одной из функций обратного вызова механизма (см. Вызов Механизма Авторизации).Доступность
Доступный в OS X v10.4 и позже.
-
Уникальное значение для сеанса авторизации, предоставленного механизмом авторизации.
Объявление
Objective C
typedef void *AuthorizationSessionId;
Обсуждение
Можно вызвать
GetSessionID
функция для получения сеанса авторизации ID.Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.4 и позже.
-
Тип данных для результата оценки авторизации.
Объявление
Objective C
typedef UInt32 AuthorizationResult;
Обсуждение
Допустимые значения для результата авторизации перечисляются в Результате Авторизации.
Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.4 и позже.
-
Интерфейс реализован Сервером безопасности.
Объявление
Objective C
typedef struct AuthorizationCallbacks { UInt32 version; OSStatus (*SetResult)( AuthorizationEngineRef inEngine, AuthorizationResult inResult); OSStatus (*RequestInterrupt)( AuthorizationEngineRef inEngine); OSStatus (*DidDeactivate)( AuthorizationEngineRef inEngine); OSStatus (*GetContextValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, AuthorizationContextFlags *outContextFlags, const AuthorizationValue **outValue); OSStatus (*SetContextValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, AuthorizationContextFlags inContextFlags, const AuthorizationValue *inValue); OSStatus (*GetHintValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, const AuthorizationValue **outValue); OSStatus (*SetHintValue)( AuthorizationEngineRef inEngine, AuthorizationString inKey, const AuthorizationValue *inValue); OSStatus (*GetArguments)( AuthorizationEngineRef inEngine, const AuthorizationValueVector **outArguments); OSStatus (*GetSessionId)( AuthorizationEngineRef inEngine, AuthorizationSessionId *outSessionId); } AuthorizationCallbacks;
Обсуждение
Эта структура передается Вашему плагину через
AuthorizationPluginCreate
функция. Функции, определяемые этой структурой описаны в Вызове Механизма Авторизации.Доступность
Доступный в OS X v10.4 и позже.
-
Интерфейс, который должен быть реализован Вашим плагином.
Объявление
Objective C
typedef struct AuthorizationPluginInterface UInt32 version; OSStatus (*PluginDestroy)( AuthorizationPluginRef inPlugin); OSStatus (*MechanismCreate)( AuthorizationPluginRef inPlugin, AuthorizationEngineRef inEngine, AuthorizationMechanismId mechanismId, AuthorizationMechanismRef *outMechanism); OSStatus (*MechanismInvoke)( AuthorizationMechanismRef inMechanism); OSStatus (*MechanismDeactivate)( AuthorizationMechanismRef inMechanism); OSStatus (*MechanismDestroy)( AuthorizationMechanismRef inMechanism); } AuthorizationPluginInterface;
Обсуждение
Ваш плагин передает этот интерфейс механизму авторизации через
AuthorizationPluginCreate
функция. Функции, определяемые этой структурой описаны в Функциях, Реализованных Плагином.
-
Определяет флаги, указывающие, должны ли данные аутентификации быть сделаны доступными для клиента авторизации.
Объявление
Objective C
typedef UInt32 AuthorizationContextFlags; enum { kAuthorizationContextFlagExtractable = (1 << 0), kAuthorizationContextFlagVolatile = (1 << 1), kAuthorizationContextFlagSticky = (1 << 2) };
Константы
-
kAuthorizationContextFlagExtractable
kAuthorizationContextFlagExtractable
Для клиента авторизации возможно использовать
AuthorizationCopyInfo
функция для получения значения.Доступный в OS X v10.4 и позже.
-
kAuthorizationContextFlagVolatile
kAuthorizationContextFlagVolatile
Значение не сохраняется для клиента авторизации.
Доступный в OS X v10.4 и позже.
-
kAuthorizationContextFlagSticky
kAuthorizationContextFlagSticky
Эти данные сохраняются посредством прерванной или неработающей оценки.
Этот флаг может использоваться для распространения состояния ошибки от нисходящего плагина до восходящего. Это не помнят в ссылке авторизации (см. Ссылку Authorization Services C.
Доступный в OS X v10.5 и позже.
Оператор импорта
Objective C
@import Security;
Доступность
Доступный в OS X v10.4 и позже.
-
-
Результат оценки авторизации.
Объявление
Objective C
enum { kAuthorizationResultAllow, kAuthorizationResultDeny, kAuthorizationResultUndefined, kAuthorizationResultUserCanceled, };
Константы
-
kAuthorizationResultAllow
kAuthorizationResultAllow
Операция авторизации успешно выполнилась, и авторизацию нужно предоставить.
Доступный в OS X v10.4 и позже.
-
kAuthorizationResultDeny
kAuthorizationResultDeny
Операция авторизации успешно выполнилась, и авторизация должна быть отклонена.
Доступный в OS X v10.4 и позже.
-
kAuthorizationResultUndefined
kAuthorizationResultUndefined
Операция авторизации перестала работать и не должна быть повторена для этого сеанса.
Доступный в OS X v10.4 и позже.
-
kAuthorizationResultUserCanceled
kAuthorizationResultUserCanceled
Пользователь запросил, чтобы была завершена оценка авторизации.
Доступный в OS X v10.4 и позже.
-
-
Версия интерфейса реализована плагином.
Объявление
Objective C
enum { kAuthorizationPluginInterfaceVersion = 0 };
Обсуждение
Сменный интерфейс определяется
AuthorizationPluginInterface
структура и описала в Функциях, Реализованных Плагином. -
Версия интерфейса реализована механизмом авторизации.
Объявление
Objective C
enum { kAuthorizationCallbacksVersion = 0 };
Обсуждение
Интерфейс механизма авторизации определяется
AuthorizationCallbacks
структура и описала в Вызове Механизма Авторизации.
Коды результата, используемые плагинами авторизации, перечислены в таблице ниже.
-
Работа завершилась успешно.
Значение
0
Описание
Работа завершилась успешно.
Доступный в OS X v10.0 и позже.
-
Произошла нераспознанная внутренняя ошибка.
Значение
- 60008
Описание
Произошла нераспознанная внутренняя ошибка.
Доступный в OS X v10.0 и позже.