SFAuthorizationPluginView без пользовательского интерфейса

Я просматривал различные форумы и блоги для примера AuthorizationPlugin или понимания, которое может показать мне, как создать плагин авторизации Mac, который не влияет на какие-либо компоненты пользовательского интерфейса. Я хочу использовать его для решения проблемы удаленного доступа. Я был в состоянии получить пример работы NameAndPasswordPlugin. Но я не могу достичь следующих требований:

  1. Не изменяйте пользовательский интерфейс по умолчанию. т.е. не имеют никаких пользовательских компонентов пользовательского интерфейса
  2. Возможность чтения и записи в поля пользовательского интерфейса по умолчанию, особенно имя пользователя (если есть) и пароль
  3. Работать по необходимости. т.е. мне нужен механизм для прохождения, когда сеанс удаленного доступа не включен. В этом случае я хочу, чтобы он вернулся к loginwindow: механизм входа

Кроме того, как это будет общаться с внешним миром? Я не мог читать или записывать в файлы из плагина. Я видел пример, где некоторые трубы, где используются. не уверен, какой метод рекомендуется

2 ответа

Вам не нужен SFAuthorizationPluginView, вам просто нужен плагин авторизации. Вы вставляете свой плагин в список плагинов, и он может читать из контекстов, установленных предыдущими плагинами, и записывать или создавать контексты для последующих плагинов.

Например, если вы работаете с консольным входом в систему, эта команда bash показывает, какие механизмы настроены (механизмы являются экземплярами плагина)

security authorizationdb read system.login.console

Если вы добавите свой плагин после встроенного: authenticate, привилегированного, то вы можете использовать этот код в вашей функции mechanInvoke для чтения значений.

err = mechanism->fPlugin->fCallbacks->GetHintValue(mechanism->fEngine, "username", &value);
    if (err == noErr) {
        //Log the event
        os_log(OS_LOG_DEBUG, "Login for user '%{public}s'.",(const char *)value->data);
}

где механизм->fPlugin->fCallbacks->GetHintValue и механизм->fEngine - это обратный вызов и engineref, которые вы устанавливаете как часть своего плагина. Существует также функция "SetContextValue" для записи имени пользователя или пароля.

Вам нужно будет написать плагин авторизации, который будет устанавливать значения контекста «имя пользователя» (kAuthorizationEnvironmentUsername) и «пароль» (kAuthorizationEnvironmentPassword). Затем установите результат как kAuthorizationResultAllow. Вам также нужно разместить свой плагин непосредственно перед loginwindow:login.

Другие вопросы по тегам