0

我一直在浏览各种论坛和博客以获取 AuthorizationPlugin 示例或理解,它可以向我展示如何创建不影响任何 UI 组件的 mac 授权插件。我想将它用于远程访问类型的解决方案。我已经能够获得 NameAndPasswordPlugin 示例工作。但我无法达到以下要求:

  1. 请勿更改默认 UI。即没有任何自定义 UI 组件
  2. 能够读取和写入默认 UI 字段,尤其是用户名(如果有)和密码
  3. 根据需要工作。即当远程访问会话未打开时,我需要该机制通过。在那种情况下,我希望它回退到 loginwindow:login 机制

还有它如何与外界沟通?我无法从插件读取或写入文件。我看到了一个使用了一些管道的例子。不知道推荐的方法是什么

4

2 回答 2

0

你不需要 SFAuthorizationPluginView,你只需要一个授权插件。您将插件插入到插件列表中,它可以从先前插件设置的上下文中读取,并为以后的插件写入或创建上下文。

例如,如果您使用控制台登录,这个 bash 命令会显示配置了哪些机制(机制是插件的实例)

security authorizationdb read system.login.console

如果您在 builtin:authenticate,privileged 之后添加插件,那么您可以在您的mechanismInvoke 函数中使用此代码来读取值。

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);
}

其中mechanism->fPlugin->fCallbacks->GetHintValue 和mechanism->fEngine 是您在插件中设置的回调和engineref。还有一个用于写入用户名或密码的“SetContextValue”函数。

于 2017-04-21T21:39:55.353 回答
0

您将需要编写一个授权插件,它将设置上下文值“用户名”(kAuthorizationEnvironmentUsername)和“密码”(kAuthorizationEnvironmentPassword)。然后将结果设置为 kAuthorizationResultAllow。您还需要在 loginwindow:login 之前放置您的插件。

于 2020-12-29T08:02:57.370 回答