Хранение имени пользователя/пароля на Mac с использованием Java

Я пишу небольшую программу (твиттер-клиент) на Java, нацеленную на Mac OS X. В рамках ее функциональности ей нужно место для хранения имени пользователя/пароля твиттера. Естественным местом был бы брелок для ключей Mac, но я не могу найти к нему доступ.

Есть ли способ получить доступ к цепочке ключей Mac с Java или, если это не удастся, каковы ваши рекомендации относительно того, где вместо этого хранить имя пользователя/пароль?


person Zarkonnen    schedule 07.04.2009    source источник


Ответы (3)


Существует API цепочки для ключей Java, в котором есть реализация KeyStore в OS X с поддержкой цепочки для ключей.

Я думаю, что связка ключей — лучшее место (если не самое место) для хранения пароля. Он зашифрован с помощью хорошего алгоритма, пользователь может быть как разрешающим, так и параноидальным в отношении доступности цепочки для ключей для приложений, как ему нравится, а затем пароль будет храниться и настраиваться, как и все другие пароли, которые хранит пользователь.

person Community    schedule 07.04.2009
comment
Мне это нравится больше, чем ответ Кевина, потому что иногда вы не будете писать твиттер-клиент и вам нужны параноидальные предупреждения о пароле Apple. Отменить или Разрешить. Отменить или Разрешить. (Виста почти была права) - person shemnon; 25.10.2009
comment
Мне тоже нравится этот, по тем же причинам. - person Kevin Williams; 21.11.2009
comment
Кто-нибудь пробовал это? Я так и сделал, и кажется, что вы не можете хранить SecretKey с помощью apple.security.KeychainStore — см. исходный код. - person Christian Schlichtherle; 01.11.2012
comment
Это красиво, но это не работает. См. mail.openjdk.java.net/pipermail /macosx-port-dev/2014-March/ для тестового кода и RFE. - person Hendrik; 12.03.2014

Я не пробовал, но похоже, что вы можете получить доступ к цепочке ключей с поставщиком криптографии Apple (com.apple.crypto.provider.Apple), создав KeyStore типа KeychainStore.


Хорошо, после некоторых экспериментов я смог получить доступ к записям сертификата закрытого ключа в файле KeychainStore. Однако пароли в моей цепочке ключей не отображались (псевдоним не был указан), и когда я попытался добавить KeyStore.SecretKeyEntry (это то, что вам нужно для хранения пароля), это не удалось с сообщением: «Ключ не является закрытым ключом». ". Ясно, что Apple не поддерживает SecretKeyEntry.

Если вы все еще хотите защитить свой пароль в Твиттере с помощью цепочки ключей, я думаю, самое близкое, что вы можете сделать, — это сгенерировать пару ключей RSA, самостоятельно подписать сертификат и добавить PrivateKeyEntry в цепочку ключей. Затем вы можете использовать пару ключей для защиты пароля Twitter.

Самостоятельно подписывать сертификаты не так уж сложно, но если вы пойдете по этому пути, вы можете обратиться за помощью к библиотеке BouncyCastle.

person erickson    schedule 07.04.2009

Вы должны взглянуть на страницу twitters API о поддержке OAuth. При использовании OAuth вам не нужно знать пароль пользователя Twitter.

http://apiwiki.twitter.com/OAuth-FAQ

person Kevin Williams    schedule 08.04.2009
comment
Это блестяще! Мне придется изучить это подробнее, но это звучит как гораздо лучшее решение, чем хранение паролей. - person Zarkonnen; 08.04.2009
comment
Если это так, вы, очевидно, получите лучший ответ. - person Zarkonnen; 08.04.2009
comment
Недавняя уязвимость openauth и последующее (временное) отключение со стороны Facebook и других организаций могут изменить вашу зависимость от этого режима аутентификации. Я бы по-прежнему рекомендовал это как предпочтительный метод аутентификации, но вам следует подумать о том, как аутентифицироваться (и хранить учетные данные), если openAuth снова отключен. - person Kevin Williams; 28.05.2009