Управление идентификацией здания, включая аутентификацию и авторизацию? Попробуйте Stormpath! Наш REST API и надежная поддержка Java SDK могут устранить риск для безопасности и могут быть реализованы за считанные минуты. Зарегистрируйтесь и никогда больше не создавайте аутентификацию!
В этом руководстве мы создадим простое приложение для Android, в котором будут храниться сгенерированные пользователем заметки удаленно, с аутентификацией пользователя, управляемой Stormpath и новым Android SDK .
Этот учебник займет около 15 минут и продемонстрирует, насколько легко и без проблем интегрировать Stormpath в новые и существующие приложения для Android, а также расскажет о некоторых проблемах безопасности и производительности при разработке Android.
Почему Stormpath для приложений Android?
Stormpath — это служба аутентификации, которая надежно хранит ваши учетные записи и личную информацию о пользователях. Плюс, это бесплатно для небольших проектов!
Наличие службы аутентификации, такой как Stormpath, позволяет создавать безопасные мобильные приложения, которые могут регистрировать и регистрировать пользователей различными способами, не ставя под угрозу безопасность вашего устройства.
Используя Stormpath, пользователи входят в систему с использованием протокола OAuth2 с подписанными токенами JSON .
С Stormpath вам не нужно быть экспертом в криптографии, чтобы создать надежную переднюю дверь для вашего приложения. В контексте данного руководства «Пользователь» — это мобильное приложение на стороне клиента, а «Приложение» — сервер, размещенный на Heroku .
Использование библиотеки Stormpath для Android упрощает правильную реализацию аутентификации пользователя, в отличие от затрат времени и усилий на внедрение безопасных методов аутентификации в ваше следующее мобильное приложение!
Библиотека Stormpath Android также может быть использована для создания более сложных сценариев аутентификации, таких как многопользовательский режим и единый вход .
В мобильных приложениях, управляемых сетью, неправильная реализация аутентификации может быть огромным риском для ваших пользователей и привести к значительным потерям времени и усилий на разработку, исправляя ошибки, которые никогда не должны были появляться.
Получение надлежащей библиотеки аутентификации, внедренной в кодовую базу вашего мобильного приложения на раннем этапе, является отличным способом ускорения разработки и снижения разочарований в дальнейшем.
ХОРОШО! Давайте что-то строить!
Давайте создадим простое приложение для создания заметок в Android. К концу этого урока у вас будет приложение, которое позволит вам зарегистрироваться и войти в систему как пользователь, сохранить заметку и получить эту заметку с вашего сервера. Буквально синхронизируйте данные заметок с облачным бэкэндом!
Это руководство предназначено для приложений Android, написанных на Java и Android SDK . Если у вас недостаточно возможностей для написания кода, который работает на 2300 различных устройствах, есть также руководство по iOS, написанное на Swift> 🙂
Настройка нашего проекта Android
В этом руководстве мы выполнили всю бэкэнд-работу за вас, а сервер API размещен по адресу https://stormpathnotes.herokuapp.com.
Типичная интеграция Stormpath в первую очередь включает архитектуру вашего сервера API, взаимодействующую с бэкэнд-сервисом Stormpath. Это позволяет вам хранить ключи API Stormpath на вашем сервере, а не жестко закодировать в вашем мобильном приложении.
Чтобы интегрироваться с существующим бэкэндом ( вместо нашего примера ), потратьте некоторое время на изучение наших языковых обучающих программ по серверной части . Или — просто застрели эту ссылку на свою бэкэнд-команду
Используемая нами служба бэкэнд-API предоставляет две защищенные конечные точки для вашего приложения Android:
-
GET /notes— возвращает заметки для аутентифицированного пользователя в форме объекта JSON. -
POST /notes— принимает объект JSON с примечаниями и сохраняет его для аутентифицированного пользователя.
Объект JSON всегда имеет вид:
|
1
|
{"notes": "The notes the user saved"} |
Если вам интересно, мы использовали следующие инструменты для создания бэкэнда для Stormpath Notes:
- Express — платформа Node.js, которая упрощает создание служб API.
- Express-Stormpath — предоставляет настраиваемый API REST для наших мобильных клиентов в Express.
- Stormpath — позволяет нам хранить и аутентифицировать пользователей, не создавая для этого собственного бэкэнда.
- Heroku — размещает код для заметок Stormpath онлайн.
Установка Stormpath
|
1
|
git clone https://github.com/stormpath/stormpath-android-notes-example.git |
Если вы хотите увидеть готовую версию проекта, проверьте готовую ветку .
Создайте приложение Android «Заметки»
Откройте проект с помощью Android Studio, и он должен быть настроен для компиляции.
Зависимость Gradle для включения Stormpath SDK:
|
1
|
compile 'com.stormpath.sdk:stormpath-sdk-android:1.1.3' |
В классе Application ( NotesApp.java ) добавьте следующее в метод onCreate :
|
1
2
3
4
5
|
// Initialize StormpathStormpathConfiguration stormpathConfiguration = new StormpathConfiguration.Builder() .baseUrl(baseUrl) .build();Stormpath.init(this, stormpathConfiguration); |
При желании для отладочной информации добавьте этот метод перед StormpathConfiguration метода StormpathConfiguration .
|
1
2
3
4
|
// We only want to show the logs in debug builds, for easier debugging.if (BuildConfig.DEBUG) { Stormpath.setLogLevel(StormpathLogger.VERBOSE);} |
Вход в систему и регистрация пользователей
Этот проект включает в себя классы Java для предварительно созданного входа в Stormpath. Эти файлы также включены в библиотеку Stormpath SDK-UI как настраиваемый интерфейс входа в систему, который отличается от классов SDK. Если вам нужен собственный пользовательский интерфейс, сетевой метод Stormpath.login можно использовать без элементов управления представлением.
Эти классы SDK-UI проходят проверку подлинности с помощью Stormpath SDK на сервере, на котором работают зависимости Stormpath.
StormpathLoginActivity можно запустить с:
|
1
|
startActivity(new Intent(this, StormpathLoginActivity.class)); |
В NotesActivity.java есть несколько случаев, когда нужно StormpathLoginActivity .
В методе onResume мы можем проверить, есть ли пользователь, вошедший в систему, захватив профиль пользователя. Если его нет, покажите логин, в противном случае получите заметку.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
Stormpath.getUserProfile(new StormpathCallback<UserProfile>() { @Override public void onSuccess(UserProfile userProfile) { getNotes(); } @Override public void onFailure(StormpathError error) { // Show login view startActivity(new Intent(context, StormpathLoginActivity.class)); }});``` **NOTE**: Stormpath access tokens are automatically created for users who sign into your application, and are stored securely on your Android device using [SharedPreferences](http://developer.android.com/reference/android/content/SharedPreferences.html). For our custom endpoints `/notes`, we are using the [OkHttp3](https://square.github.io/okhttp/3.x/okhttp/okhttp3/package-summary.html) library. So let's initialize the OkHttp3 objects in the `NotesActivity.java`'s `onCreate()` method. ```java// Initialize OkHttp library.HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { Stormpath.logger().d(message); }}); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);this.okHttpClient = new OkHttpClient.Builder() .addNetworkInterceptor(httpLoggingInterceptor) .build(); |
Посмотрите на закрытые методы getNotes() и saveNote() для примеров подготовки метода OkHttp3.
Оба эти метода работают так, что они формируют запрос, добавляют заголовки, выполняют сетевой вызов и передают в другую часть приложения успешный ответ из сети.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
private void saveNote() { RequestBody requestBody = new FormBody.Builder() .add("notes", mNote.getText().toString()) .build(); Request request = new Request.Builder() .url(NotesApp.baseUrl + "notes") .headers(buildStandardHeaders((Stormpath.accessToken()))) .post(requestBody) .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { Intent intent = new Intent(ACTION_POST_NOTES); LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } });} |
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
private void getNotes() { Request request = new Request.Builder() .url(NotesApp.baseUrl + "notes") .headers(buildStandardHeaders(Stormpath.accessToken())) .get() .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { JSONObject mNotes; try { mNotes = new JSONObject(response.body().string()); String noteCloud = mNotes.getString("notes"); // You can also include some extra data. Intent intent = new Intent(ACTION_GET_NOTES); intent.putExtra("notes", noteCloud); LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } catch (JSONException e) { } } });} |
Оба эти метода требуют, чтобы объект Headers был должным образом подготовлен для аутентификации. buildStandardHeaders() сделает это за вас:
|
01
02
03
04
05
06
07
08
09
10
|
private Headers buildStandardHeaders(String accessToken) { Headers.Builder builder = new Headers.Builder(); builder.add("Accept", "application/json"); if (StringUtils.isNotBlank(accessToken)) { builder.add("Authorization", "Bearer " + accessToken); } return builder.build();} |
В базе данных Stormpath пара ключ / значение Notes хранится в пользовательском поле «CustomData». Хотя произвольные пары ключ / значение могут быть добавлены к объекту пользователя, Stormpath не предназначен для использования в качестве хранилища произвольных объектов.
saveNotes() вызывается в onClickListener
Наконец, давайте добавим метод выхода из системы в меню панели инструментов. В onOptionsItemSelected найдите if statement отношении (id == R.id.action_logout) и добавьте следующее:
|
1
2
|
Stormpath.logout();startActivity(new Intent(context, StormpathLoginActivity.class)); |
Теперь пользователь сможет выйти из системы и сразу же будет представлен поток входа в систему.
Необязательным дополнением будет сохранение заметок на стороне клиента.
Теперь скомпилируйте и запустите! Если вы сейчас запустите и опробуете свое приложение снова, вы обнаружите, что теперь вы можете регистрировать пользователей, входить в систему и сохранять свои заметки!
Что дальше?
Попробуйте iOS SDK. Если вы ( или ваш друг ) занимаетесь разработкой для iOS, попробуйте выполнить руководство по iOS для Stormpath Notes . Поскольку приложение будет отправлять запросы на один и тот же API, вы заметите, что можете сохранять свои заметки на одном устройстве и открывать их на другом!
Создайте бэкэнд с помощью Stormpath — попробуйте создать этот API с нуля! Пример бэкэнда Stormpath Notes — всего 45 строк кода! Смотрите код на GitHub . В качестве альтернативы, попробуйте начать работу с express-stormpath или stormpath-laravel (скоро будет больше интеграций!)
Stormpath бесплатен и может помочь вашей команде написать безопасное, масштабируемое приложение, не беспокоясь о мельчайших деталях аутентификации, авторизации и безопасности пользователя. Зарегистрируйте аккаунт сегодня!
Управление идентификацией здания, включая аутентификацию и авторизацию? Попробуйте Stormpath! Наш REST API и надежная поддержка Java SDK могут устранить риск для безопасности и могут быть реализованы за считанные минуты. Зарегистрируйтесь и никогда больше не создавайте аутентификацию!

