我有一個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;
}
正如你所看到的那樣,我正在通過設置一個硬編碼的正確名稱進行測試,然後將該權利重新提交給安全管理服務器。
我現在陷入困境,似乎無法找到前進的方向。希望這裏的某個人可能知道在哪裏尋找。