我有一个Objective-C应用程序(https://github.com/NBICreator/NBICreator)和一个特权辅助工具。授权会话总是要求助手的用户密码
我有一些不同的特权任务助手需要在一个构建过程中执行,我想让用户只验证一次执行这些任务。
授权有效,但似乎无法在助手中重复使用该会话。即使我向安全管理服务器提供完全相同的权利,并且使用相同的身份验证,但用户始终必须为每个步骤进行身份验证。
我已经阅读了文档,并首先在主应用程序中测试了预认证方法,并尝试打印出来(并在帮助程序中保留auth会话)。但是我所尝试过的东西还没有成功。
我需要som帮助确定安全管理服务器为什么需要重新进行身份验证。
在主分支GitHub上的代码是当前的,我试图通过来回改变的东西和测试。使用该代码,即使我使用相同的身份验证权限,每次调用助手函数时,用户都必须进行身份验证。
这是正确的样子在授权数据库中:
class = rule;
created = "470329367.933364";
"default-prompt" = {
"" = "NBICreator is trying to start an Imagr workflow.";
};
identifier = "com.github.NBICreator";
modified = "470329367.933364";
requirement = "identifier \"com.github.NBICreator\" and anchor apple generic and certificate leaf[subject.CN] = \"Mac Developer: Erik Berglund (BXUF2UUW7E)\" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */";
rule = (
"authenticate-admin"
);
version = 0;
NSStringFromSelector(@selector(authorizeWorkflowImagr:withReply:)) : @{
kCommandKeyAuthRightName : @"com.github.NBICreator.workflowImagr",
kCommandKeyAuthRightDefault : @kAuthorizationRuleAuthenticateAsAdmin,
kCommandKeyAuthRightDesc : NSLocalizedString(
@"NBICreator is trying to start an Imagr workflow.",
@"prompt shown when user is required to authorize to add a user"
)
},
而这正是我检查,如果用户通过验证: https://github.com/NBICreator/NBICreator/blob/master/NBICreator/Helper/NBCHelperAuthorization.m#L222-L253
+ (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command authRef:(AuthorizationRef)authRef {
#pragma unused(authData)
NSError * error;
OSStatus err = 0;
AuthorizationItem oneRight = { NULL, 0, NULL, 0 };
AuthorizationRights rights = { 1, &oneRight };
oneRight.name = [@"com.github.NBICreator.workflowImagr" UTF8String];
err = AuthorizationCopyRights(
authRef,
&rights,
NULL,
kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed,
NULL
);
if (err != errAuthorizationSuccess) {
NSString *message = CFBridgingRelease(SecCopyErrorMessageString(err, NULL));
error = [NSError errorWithDomain:[[NSProcessInfo processInfo] processName] code:err userInfo:@{ NSLocalizedDescriptionKey : message }];
}
return error;
}
正如你所看到的那样,我正在通过设置一个硬编码的正确名称进行测试,然后将该权利重新提交给安全管理服务器。
我现在陷入困境,似乎无法找到前进的方向。希望这里的某个人可能知道在哪里寻找。