Ссылка плагина авторизации
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 touse 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Непрозрачный дескриптор, который необходимо пасовать назад к механизму авторизации при вызове одной из функций обратного вызова механизма.
mechanismIDID механизма, указанный в базе данных политики авторизации, передается плагину так, чтобы плагин мог создать надлежащий механизм.
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) };Константы
-
kAuthorizationContextFlagExtractablekAuthorizationContextFlagExtractableДля клиента авторизации возможно использовать
AuthorizationCopyInfoфункция для получения значения.Доступный в OS X v10.4 и позже.
-
kAuthorizationContextFlagVolatilekAuthorizationContextFlagVolatileЗначение не сохраняется для клиента авторизации.
Доступный в OS X v10.4 и позже.
-
kAuthorizationContextFlagStickykAuthorizationContextFlagStickyЭти данные сохраняются посредством прерванной или неработающей оценки.
Этот флаг может использоваться для распространения состояния ошибки от нисходящего плагина до восходящего. Это не помнят в ссылке авторизации (см. Ссылку Authorization Services C.
Доступный в OS X v10.5 и позже.
Оператор импорта
Objective C
@import Security;Доступность
Доступный в OS X v10.4 и позже.
-
-
Результат оценки авторизации.
Объявление
Objective C
enum { kAuthorizationResultAllow, kAuthorizationResultDeny, kAuthorizationResultUndefined, kAuthorizationResultUserCanceled, };Константы
-
kAuthorizationResultAllowkAuthorizationResultAllowОперация авторизации успешно выполнилась, и авторизацию нужно предоставить.
Доступный в OS X v10.4 и позже.
-
kAuthorizationResultDenykAuthorizationResultDenyОперация авторизации успешно выполнилась, и авторизация должна быть отклонена.
Доступный в OS X v10.4 и позже.
-
kAuthorizationResultUndefinedkAuthorizationResultUndefinedОперация авторизации перестала работать и не должна быть повторена для этого сеанса.
Доступный в OS X v10.4 и позже.
-
kAuthorizationResultUserCanceledkAuthorizationResultUserCanceledПользователь запросил, чтобы была завершена оценка авторизации.
Доступный в 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 и позже.
