我一直在各种论坛和博客中抓取授权插件示例或理解,这可以告诉我如何创建不影响任何UI组件的mac授权插件。我想将其用于远程访问类型的解决方案。我已经能够获得名称和密码插件示例工作。但我无法达到以下要求:
- 不要更改默认 UI,即没有任何自定义 UI 组件
- 能够读取和写入默认 UI 字段,尤其是用户名(如果有)和密码
- 根据需要工作。 即,当远程访问会话未打开时,我需要通过的机制。在这种情况下,我希望它回退到登录窗口:登录机制
还有它如何与外界沟通?我无法从插件读取或写入文件。我看到一个例子,其中使用了一些管道。不确定推荐的方法是什么
你不需要SFAuthorizationPluginView,你只需要一个授权插件。 您将插件插入到插件列表中,它可以从以前的插件设置的上下文中读取,并为以后的插件写入或创建上下文。
例如,如果您正在使用控制台登录,则此 bash 命令显示配置了哪些机制(机制是插件的实例)
security authorizationdb read system.login.console
如果你在内置: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 是您作为插件的一部分设置的回调和引擎引用。 还有一个"SetContextValue"函数用于写入用户名或密码。
您需要编写一个授权插件,该插件将设置上下文值"用户名"(kAuthorizationEnvironmentUsername)和"密码"(kAuthorizationEnvironmentPassword)。然后将结果设置为 kAuthorizationResultAllow。您还需要将插件放在登录窗口:登录之前。