【问题标题】:Creating an OS X authentication plugin创建 OS X 身份验证插件
【发布时间】:2014-03-11 08:09:32
【问题描述】:

我需要为 OS X 登录机制创建一个插件,以便我可以通过输入密码以外的其他方式解锁屏幕。我知道这样的事情已经存在 - 敲门解锁或 Rohos USB 密钥登录就是例子。

我在 ADC 上找到了名为“NameAndPassword”的示例代码 (https://developer.apple.com/library/mac/samplecode/NameAndPassword/Introduction/Intro.html),经过一番努力 (Custom login/lock screen in OS X Mavericks),我设法在 Mavericks 上构建并安装了它。问题是整个插件显然有点过时并且在我输入密码后没有登录(我需要通过 SSH 重新启动机器)。我是 xcode/objective-c 初学者,无法自己解决问题。

基本上,我的问题是:如何修改示例 NameAndPassword 代码,以便我可以使用键盘以外的输入登录?我想创建一个应用程序来提供密码,但不是通过键盘提供密码——我相信这就是敲门解锁的工作原理。

【问题讨论】:

  • 您好,感谢您的指导,我自己成功运行了这个授权插件。但是,如果我设置了错误的用户名和密码组合,我只是再次回到登录屏幕......也许你知道是否有办法从上下文中获取失败原因?谢谢!

标签: objective-c macos osx-mavericks sfauthorizationpluginview


【解决方案1】:

Apple 官方代码中存在一些错误。我修补了它们并放在我的 Github 上:https://github.com/skycocker/NameAndPassword

这个版本的插件应该可以正常工作,只要你替换

<string>loginwindow:login</string>

在授权策略数据库中使用

<string>NameAndPassword:invoke</string> 

否则它不会让你登录。

【讨论】:

  • 这样做了,插件无法正常工作...有什么想法吗?
  • 你是这样做的吗? stackoverflow.com/questions/21582995/…
  • 我做到了,现在我让插件工作了。但是,它只有在您从 Apple Menu/Log Out 菜单中注销时才起作用……有没有办法可以将其设置为主要登录机制,以便在计算机打开时显示?
  • @OscarSwanros 这取决于您是否启用了 FileVault。如果这样做,则无法更改启动登录屏幕。但是,您可以打开快速用户切换,然后运行/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend 或从顶部栏菜单中选择标有您的用户名的“登录屏幕”。
  • @OscarSwanros 晚了几年,但如果你禁用自动登录,你可以使用你的 AuthPlugin。它将在启动时显示两个屏幕。一个解锁磁盘,然后另一个以用户身份登录。 sudo defaults write /Library/Preferences/com.apple.loginwindow DisableFDEAutoLogin -bool YES
【解决方案2】:

我正在解决同样的问题,我也是 Obj-C 初学者。我已经对敲门解锁应用程序进行了一些分析,它没有授权 system.login.console 正确,它正在定义自己的规则并在锁定计算机时调用屏幕保护程序并对其自身进行锁定。它不是像 NameAndPassword 示例那样的授权插件。它没有安装到 SecurityAuthorizationPlugins 系统文件夹中,它被注册为用户的 loginAgent。

我也被 NameAndPassword 插件的问题所困扰。您是否使用(甚至使用键盘)NameAndPassword 插件成功登录?

【讨论】:

  • 我还没有设法修复 NameAndPassword,但我计划在本周的某个地方使用另一台 Mac 和 debug it remotely with Xcode
  • 好吧,经过一番努力,我对 NameAndPassword 插件进行了调试,我不得不承认它到目前为止还没有成功 - 它需要 Xcode here 上看到更多关于它的讨论。你对这个 loginAgent 了解更多吗?我不能谷歌它。看起来这将是一个更好的方法 - auth 插件似乎已被弃用。
  • 我解决了这些问题。看看答案stackoverflow.com/a/22050896/2113110
  • 太棒了!对于远程调试 - 到目前为止我发现的唯一解决方案是修改记录器以将日志放入 /var/log/somelog.log 并使用另一台机器 - 跟踪该日志文件。
猜你喜欢
  • 2011-10-12
  • 2015-09-11
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多