私はユーザーがウェブページに持ち込まれたメニュー項目を選択するアプリケーションで作業しています。 Webページには認証が必要で、ユーザーのために認証情報を私のアプリケーションに保存されているSafari/Firefox/Chromeに渡したいと思っているユーザーの方が簡単になります。Mac OS Xで 'Web Form Password'タイプのキーチェーンアイテムを作成する
私は、キーチェーンアクセスに美しく表示される一般的なインターネットキーチェーンアイテムを作成しようとしましたが、ウェブブラウザではそれを認識しません。
ブラウザ用に保存されているキーチェーンアイテムのタイプが「Webフォームパスワード」であることに気付きました。
タイプ「kSecAuthenticationTypeHTMLForm」のキーチェーンアイテムを作成しようとすると、「インターネットパスワード」としてキーチェーンアクセスに表示されます。私はEMKeychainクラスからいくつかのコードを変更した:
+ (EMInternetKeychainItem *)addInternetKeychainItemForServer:(NSString *)server
withUsername:(NSString *)username
password:(NSString *)password
path:(NSString *)path
port:(NSInteger)port
protocol:(SecProtocolType)protocol
{
if (!username || !server || !password)
return nil;
const char *serverCString = [server UTF8String];
const char *usernameCString = [username UTF8String];
const char *passwordCString = [password UTF8String];
const char *pathCString = [path UTF8String];
if (!path || [path length] == 0)
pathCString = "";
SecKeychainItemRef item = nil;
OSStatus returnStatus = SecKeychainAddInternetPassword(NULL, strlen(serverCString), serverCString, 0, NULL, strlen(usernameCString), usernameCString, strlen(pathCString), pathCString, port, protocol, kSecAuthenticationTypeHTMLForm, strlen(passwordCString), (void *)passwordCString, &item);
if (returnStatus != noErr || !item)
{
if (_logsErrors)
NSLog(@"Error (%@) - %s", NSStringFromSelector(_cmd), GetMacOSStatusErrorString(returnStatus));
return nil;
}
return [EMInternetKeychainItem _internetKeychainItemWithCoreKeychainItem:item forServer:server username:username password:password path:path port:port protocol:protocol];
}
ありがとうございました!私が十分な評判を持っていれば、私はそれを投票するだろう。 – joshbillions