KeyChain. Аккаунт пользователя

Так или иначе, все реже можно найти приложение, которое не требует создания аккаунта для полноценной работы. В связи с этим возникает необходимость в некоторого рода защищенном хранилище аутентификационных данных. В iOS для этих целей используется framework Security и его сервис KeyChain. Далее будет описан подход для работы с этим сервисом.

Данные пользователя

Как сказано в документации, хранилище используется для безопасного хранения небольших объемов данных. Поэтому требуется некоторый объект Credentials, содержащий информацию об аккаунте, и с которым впоследствии будет происходить работа.

Сформируем минимальные необходимые требования к защищенному хранилищу.

  1. Возможность сохранить данные.
  2. Возможность загрузить данные.
  3. Возможность удалить данные.

В то же время сформулируем основные ограничения к коду.

  1. Объект должен формировать четкую и понятную абстракцию. Причем уровень абстракции должен соблюдаться и внутри методов.
  2. Объект должен быть инкапсулирован, предоставляя другим объектам лишь несколько методов для вызова, скрывая внутреннюю реализацию.

В результате работы над данными требованиями и ограничениями был разработан класс KeyChain.

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

init()
func save(credentials: Credentials) throws
func load(credentials: inout Credentials) throws
func remove(credentials: Credentials) throws

Все что касается ограничений, связанных с кодированием, опытный читатель может проанализировать самостоятельно.

Таким образом, при завершении срока действия токена авторизации и наличии в хранилище аккаунта пользователя, не будет необходимости в отображении экрана авторизации. Достаточно будет загрузить аккаунт из хранилища и авторизовать пользователя повторно.

Причем можно повторить подход, который используется в Apple — объявить общий экземпляр (singleton), либо передать объект в окружение (environmentObject), либо, как приводится в примере, создать экземпляр по необходимости.

Заключение

Хранение авторизационных данных — довольно частая задача, которая решается разработчиками, поскольку токен авторизации через определенное время утрачивает актуальность. Для того, чтобы пользовательский опыт был максимально положительным, нужно выполнять повторную авторизацию в “тихом” режиме, а не выбрасывать пользователя на экран ввода логина и пароля.

В любом случае, это один из наиболее распространенных вариантов использования защищенного хранилища. В качестве другого примера можно привести хранение “секретов” пользователя. Но об этом как-нибудь в другой раз.

  1. Keychain Services
  2. Security

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Ace Rodstin

Ace Rodstin

More from Medium

Control Flow in Swift

Preventing merge conflicts with XcodeGen for your xcode project using xcodeGen and project.yml file

A Swift transition

Crowdin CDN— streamline the localization process (iOS)