Если вашему GDK Glassware необходимо аутентифицировать пользователей в веб-службе, GDK предоставляет API, который позволяет пользователю вводить свои учетные данные при установке вашего Glassware.
Используя этот API, вы обеспечиваете согласованный пользовательский интерфейс для пользователей Glass и избегаете накладных расходов на реализацию собственных пользовательских схем аутентификации.
Создание учетной записи службы Google API
Если проверка подлинности настроена правильно, серверная часть вашего веб-приложения использует API-интерфейс Mirror для отправки информации об учетной записи пользователя в Glass после того, как он пройдет проверку подлинности в вашей службе.
Чтобы получить доступ к этому API, создайте проект Google API, а затем создайте идентификатор клиента для «служебной учетной записи» (а не «веб-приложения»). Используя учетную запись службы, пользователям не нужно отдельно предоставлять вашему приложению разрешение на отправку своих учетных данных в Glass, и им не будет снова представлена страница разрешений OAuth и ваша собственная страница аутентификации.
Чтобы создать эту учетную запись:
- Перейдите в консоль разработчиков Google .
- Нажмите кнопку «Создать проект» и введите запрошенную информацию.
- После создания проекта запишите номер проекта , который понадобится вам позже.
- В разделе APIs & auth щелкните APIs и включите Google Mirror API для своего нового проекта.
- В разделе «API и авторизация» нажмите «Учетные данные» , затем нажмите «Создать новый идентификатор клиента». Установите флажок Учетная запись службы , чтобы создать новый идентификатор клиента OAuth 2.0 для проекта.
- Всплывающее окно сообщит вам, что закрытый ключ загружается на ваш компьютер, и предоставит вам пароль для этого закрытого ключа. Как только вы закроете это окно, вы не сможете снова загрузить этот закрытый ключ или увидеть пароль. Если они когда-либо будут потеряны, вы должны создать новый.
- Запишите адрес электронной почты учетной записи службы, который понадобится вам позже, чтобы сделать вызов API.
Предоставление метаданных о вашей стеклянной посуде
Когда вы будете готовы отправить свою стеклянную посуду, вам нужно будет предоставить следующую информацию. Это позволяет нам правильно настроить проверку подлинности Glassware при его реализации.
- Ваш URL-адрес для аутентификации , на который перенаправляются пользователи при включении Glassware в MyGlass.
- Тип учетной записи (строка, которую вы будете использовать при вызове API-интерфейсов Android
AccountManager
на устройстве Glass). - Имя пакета вашего приложения из вашего
AndroidManifest.xml
- Числовой идентификатор проекта Google API для проекта, который вы создали выше.
- APK для загрузки на MyGlass. Для тестирования вам нужно предоставить этот APK только один раз, чтобы выполнить первоначальную загрузку, когда ваша стеклянная посуда включена из MyGlass; после этого вы можете повторять и отлаживать локально, перезаписывая APK на своем устройстве. Обратите внимание, что этот APK должен соответствовать следующим критериям:
- Он должен быть выровнен по zip-архиву.
- После этого вы не должны вносить какие-либо изменения в имя пакета или закрытый ключ подписи (менеджер пакетов Android не разрешает обновления, если любое из этих изменений).
- Он должен быть меньше 50 мегабайт.
- Он должен быть скомпилирован с использованием последней версии GDK.
Реализация потока аутентификации
На следующей диаграмме показан основной поток аутентификации для GDK Glassware:
Чтобы реализовать поток аутентификации:
Когда пользователи включают ваш Glassware в MyGlass, они перенаправляются на ваш URL-адрес для аутентификации. Эти запросы включают параметр запроса с именем
userToken
, который необходимо использовать позже.Пользователь вводит свои учетные данные на вашей странице аутентификации.
Ваш сервер проверяет учетные данные пользователя. Если учетные данные действительны, выполните вызов Mirror API для метода
mirror.accounts.insert
. Этот метод требует, чтобы вы указали областьhttps://www.googleapis.com/auth/glass.thirdpartyauth
Thirdpartyauth при создании объекта службы «Зеркало». Примеры выполнения этого вызова API с использованием необработанного HTTP или Java показаны в примерах создания учетной записи .Параметры и тело запроса, которые вы предоставляете ниже, представляют ту же информацию, которую вы предоставили бы
AccountManager
Android, если бы вы создавали учетную запись непосредственно на устройстве.Имя свойства Ценить Описание features[]
список строк Список функций (см. AccountManager.hasFeatures
).password
нить Пароль учетной записи (см. AccountManager.getPassword
). Мы рекомендуем вам не хранить в этом поле фактический пароль пользователя, а вместо этого использовать его для хранения долгоживущих личных данных, таких как токен обновления.userData[]
список объектов Одна или несколько пар пользовательских данных, связанных с учетной записью (см. AccountManager.getUserData
).userData[].key
нить Ключ, связанный с определенной парой "ключ-значение" пользовательских данных. userData[].value
нить Значение, связанное с определенной парой ключ-значение пользовательских данных. authTokens[]
список объектов Один или несколько токенов авторизации, связанных с учетной записью (см. AccountManager.getAuthToken
).authTokens[].type
нить Тип токена авторизации. authTokens[].authToken
нить Токен авторизации. Получив запрос
mirror.account.insert
, API-интерфейс Mirror отправляет учетную запись на устройство(а) Glass пользователя, где теперь вы можете получить к ней доступ с помощью классаAccountManager
.
Рекомендуемые потоки аутентификации
Следуйте этим рекомендациям, чтобы реализовать удобный процесс аутентификации:
- Оптимизируйте поток для мобильных устройств.
- Если у вашего потока есть область действия, и пользователь отменит их, создайте хорошо продуманное сообщение об ошибке.
- Убедитесь, что запрошенные области действительно используются в вашем Glassware.
- Если учетную запись пользователя можно подключить, убедитесь, что вы подключили ее.
- По возможности пользовательские данные должны сохраняться в облаке.
Чтобы обеспечить согласованность проверки подлинности Glassware, используйте один из следующих потоков проверки подлинности:
Зеркало или гибрид без учетной записи
- После включения в MyGlass ваш URL-адрес для аутентификации открывается во всплывающем окне.
- Это напрямую отправляет пользователя к областям для принятия.
- После того, как пользователь примет или отменит области действия, закройте всплывающее окно.
Зеркало с аккаунтом
- После включения в MyGlass ваш URL-адрес для аутентификации открывается во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте пользователя непосредственно в области.
- Если пользователь не вошел в систему, отобразите поля входа, разрешите им войти в вашу службу, а затем отправьте их в области.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи. Пользователи должны иметь возможность создать учетную запись как часть процесса установки.
- Пользователь принимает области.
- Если у вашего Glassware есть настраиваемые параметры, отправьте пользователя на страницу настроек с выбранными разумными значениями по умолчанию.
- Если в вашем Glassware нет настраиваемых параметров, отправьте пользователя на страницу подтверждения. Закройте всплывающее окно, если дополнительная настройка не требуется.
Гибрид с аккаунтом
- После включения в MyGlass ваш URL-адрес для аутентификации открывается во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте пользователя непосредственно в области.
- Если пользователь не вошел в систему, отобразите поля входа, разрешите им войти, а затем отправьте их в области.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи.
- Пользователь принимает области.
- Отправьте запрос API-интерфейсу зеркала для вставки учетной записи GDK.
- Отправьте пользователя на страницу настроек с выбранными разумными значениями по умолчанию.
- Отправьте пользователю страницу подтверждения. Закройте всплывающее окно, если дополнительная настройка не требуется.
Зеркальное или гибридное с учетной записью и настраиваемыми областями
- После включения в MyGlass ваш URL-адрес для аутентификации открывается во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте пользователя во внутренние области.
- Если пользователь не вошел в систему, отобразите поля входа, разрешите им войти, а затем отправьте их во внутренние области.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи.
- Когда пользователь примет ваши настраиваемые области, отправьте пользователя в области Google.
- Отправьте запрос API-интерфейсу зеркала для вставки учетной записи GDK.
- Отправьте пользователя на страницу настроек с выбранными разумными значениями по умолчанию.
- Отправьте пользователю страницу подтверждения. Закройте всплывающее окно, если дополнительная настройка не требуется.
Зеркально или гибридно с приложением для Android/iPhone
- После включения в MyGlass ваш URL-адрес для аутентификации открывается во всплывающем окне.
- Это напрямую отправляет пользователя к областям для принятия.
- После того, как пользователь примет области действия:
- Если у пользователя есть сопутствующее приложение и он прошел проверку подлинности, закройте всплывающее окно.
- Если нет, отправьте пользователя на межстраничное объявление, которое направит его на загрузку приложения из магазина Google Play или магазина iOS.
- После установки приложения и авторизации закройте всплывающее окно.
GDK и без аккаунта
Включение Glassware в MyGlass — это все, что требуется для этого процесса.
ГДК с учетной записью
- После включения в MyGlass ваш URL-адрес для аутентификации открывается во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте его на экран подтверждения.
- Если пользователь не вошел в систему, отобразите поля входа, разрешите им войти, а затем отправьте их на экран подтверждения.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи.
- Пользователь принимает области.
- Отправьте запрос API-интерфейсу зеркала для вставки учетной записи GDK.
- Покажите экран подтверждения и закройте экран после его отображения в течение короткого периода времени.
Примеры создания учетной записи
По возможности используйте клиентские библиотеки для Mirror API. Это упрощает вызов mirror.accounts.insert
для создания учетной записи.
Необработанный пример HTTP
В приведенном ниже примере показан только URL-адрес запроса и пример ожидаемого тела JSON. Выполнение необработанных HTTP-запросов от имени служебной учетной записи намного сложнее (полную информацию см. в разделе Использование OAuth 2.0 для межсерверных приложений ), поэтому мы рекомендуем вам использовать одну из наших клиентских библиотек API Google, если это возможно, чтобы упростить эту задачу.
Метод запроса и URL:
POST https://www.googleapis.com/mirror/v1/accounts/{userToken}/com.example.myapp/username%40email.com
Тело запроса:
{
"features": ["a", "b", "c"],
"userData": [
{ "key": "realName", "value": "Rusty Shackleford" },
{ "key": "foo", "value": "bar" }
],
"authTokens": [
{ "type": "your_token_type", "authToken": "zT419Ma3X2pBr0L..." }
]
}
Замените {userToken}
в URL-адресе запроса токеном, который был передан на ваш URL-адрес проверки подлинности на шаге 1 раздела Реализация потока проверки подлинности .
Пример Java
В этом примере показано, как использовать клиентскую библиотеку Java для вызова mirror.accounts.insert
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.mirror.Mirror;
import com.google.api.services.mirror.model.Account;
import com.google.api.services.mirror.model.AuthToken;
import com.google.common.collect.Lists;
...
/** Email of the Service Account */
private static final String SERVICE_ACCOUNT_EMAIL =
"<some-id>@developer.gserviceaccount.com";
/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH =
"/path/to/<public_key_fingerprint>-privatekey.p12";
/** The account type, usually based on your company or app's package. */
private static final String ACCOUNT_TYPE = "com.example.myapp";
/** The Mirror API scopes needed to access the API. */
private static final String MIRROR_ACCOUNT_SCOPES =
"https://www.googleapis.com/auth/glass.thirdpartyauth";
/**
* Build and returns a Mirror service object authorized with the service accounts.
*
* @return Mirror service object that is ready to make requests.
*/
public static Mirror getMirrorService() throws GeneralSecurityException,
IOException, URISyntaxException {
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(MIRROR_ACCOUNT_SCOPES)
.setServiceAccountPrivateKeyFromP12File(
new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
.build();
Mirror service = new Mirror.Builder(httpTransport, jsonFactory, null)
.setHttpRequestInitializer(credential).build();
return service;
}
/**
* Creates an account and causes it to be synced up with the user's Glass.
* This example only supports one auth token; modify it if you need to add
* more than one, or to add features, user data, or the password field.
*
* @param mirror the service returned by getMirrorService()
* @param userToken the user token sent to your auth callback URL
* @param accountName the account name for this particular user
* @param authTokenType the type of the auth token (chosen by you)
* @param authToken the auth token
*/
public static void createAccount(Mirror mirror, String userToken, String accountName,
String authTokenType, String authToken) {
try {
Account account = new Account();
List<AuthToken> authTokens = Lists.newArrayList(
new AuthToken().setType(authTokenType).setAuthToken(authToken));
account.setAuthTokens(authTokens);
mirror.accounts().insert(
userToken, ACCOUNT_TYPE, accountName, account).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
Получение учетных записей на Glass
Получение и использование объектов Account
на Glass аналогично использованию стандартного Android AccountManager
.
Объявите следующие разрешения манифеста в файле
AndroidManifest.xml
:<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" />
Получить учетные записи Glassware:
AccountManager accountManager = AccountManager.get(mContext); // Use your Glassware's account type. Account[] accounts = accountManager.getAccountsByType("com.example"); // Pick an account from the list of returned accounts.
Получить токен авторизации из
Account
:// Your auth token type. final String AUTH_TOKEN_TYPE = "oauth2:https://www.example.com/auth/login"; accountManager.getAuthToken(account, AUTH_TOKEN_TYPE, null, activity, new AccountManagerCallback<Bundle>() { public void run(AccountManagerFuture<Bundle> future) { try { String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN); // Use the token. } catch (Exception e) { // Handle exception. } } }, null);