Как обеспечить аутентификацию в Swift

Я довольно новичок в программировании приложений для iOS. У меня был более глубокий взгляд на создание логина для приложения. Процедура для меня вполне понятна, но у меня есть пара опасений по поводу безопасности.

A) Приложение отправляет учетные данные, предоставленные пользователем, в API, который может быть написан на php. Затем этот API собирается проверить учетные данные и отправить ответ обратно в приложение. Однако разве это не большая проблема безопасности? Разве нельзя проверить некоторые учетные данные для всех, у кого есть адрес API?

Б) Во-вторых, я не видел учебник, который правильно шифрует учетные данные в приложении перед отправкой их в API. Если они выполняют шифрование, они позволяют API выполнять свою работу. Как правильно зашифровать их в приложении и отправить зашифрованные учетные данные в API? Нужно ли хранить секретный ключ в моем приложении?

Я спрашиваю об этом, потому что я хотел бы сделать это правильно с самого начала. Благодарю.

1

Решение

Во-первых, я хотел бы сказать, убедитесь, что ваш сервер имеет SSL а также ipv6 функциональность готова. (Заботясь об этих правах, вы не сможете отклонить ваше приложение при просмотре приложения)

С точки зрения обеспечения безопасности ваших маршрутов API, вы можете посмотреть в JWT token, JWT работает с парольной фразой или сертификатом (имеется в виду закрытый и открытый ключи, подумайте, когда вы хотите подключиться к серверу ssh без пароля).

Я бы предпочел использовать сертификаты, однако вам нужно убедиться, что вы не потеряете эти сертификаты, потому что, как только ваше приложение будет готово к продаже, только эти конкретные сертификаты позволят вашему приложению взаимодействовать с этим API.

Как только все маршруты вашего API будут защищены, я:

  • генерировать & сохранить токен по умолчанию в цепочке для ключей вашего приложения (его цель — разрешить доступ к вашему API только один раз)

  • Со стороны API, создайте маршрут (/generate_token) он будет читать этот токен по умолчанию, и если он действителен, вы генерируете новый токен и отправляете его как ответ.

  • удалите этот токен по умолчанию из цепочки для ключей и сохраните этот новый токен там.

Когда ваше приложение для iOS впервые запустилось, вы можете иметь isAlreadyFetchedToken = false переменная сохранена в вашем UserDefault. Эта переменная позволяет вам отслеживать, есть ли у вас новый токен или нет.

if isAlreadyFetchedToken == false {
// load the default token into some variable
let default_token = ...
// create custom http header
let header = ["Authorization": "Bearer \(default_token)" ]
// access your /generate_token route from your api
// if you get a response it should contain a new_token
// save new token into keychain && remove default one
// update userDefault var to true
isAlreadyFetchedToken = true
}

Теперь каждый раз, когда вы хотите получить доступ к вашему API, вы загружаете этот токен из цепочки для ключей и передаете его в ваши маршруты API ». Authorization header например [Authorization: "Bearer" + new_token],

Это один из способов, а не единственный

1

Другие решения

API должен разрешать запросы от кого угодно и где угодно. Если ваш API разрешает запросы из любого места и еще безопасный, то он хорошо спроектирован. Если ваш API защищен только при взаимодействии с определенным программным обеспечением клиента, значит, ваш API плохо спроектирован.

Решение простое. Используйте TLS и внедрите достойную систему аутентификации. Токены JWT — хорошее начало.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector