Если вашему GDK Glassware необходимо аутентифицировать пользователей в веб-сервисе, GDK предоставляет API, который позволяет пользователю вводить свои учетные данные при установке вашего Glassware.
Используя этот API, вы обеспечиваете единообразный пользовательский интерфейс для пользователей Glass и избегаете накладных расходов на реализацию собственных схем аутентификации.
Создание учетной записи службы Google API
Если аутентификация настроена правильно, серверная часть вашего веб-приложения использует API зеркала для передачи информации об учетной записи пользователей в Glass после того, как они проходят аутентификацию в вашей службе.
Чтобы получить доступ к этому API, создайте проект Google API, а затем создайте идентификатор клиента для «служебной учетной записи» (а не «веб-приложения»). Используя учетную запись службы, пользователям не нужно отдельно предоставлять вашему приложению разрешение на отправку своих учетных данных в Glass, и им больше не будет представлена одновременно страница разрешений OAuth и ваша собственная страница аутентификации.
Чтобы создать эту учетную запись:
- Перейдите в консоль разработчиков Google .
- Нажмите кнопку «Создать проект» и введите запрошенную информацию.
- После создания проекта запишите номер проекта , который понадобится вам позже.
- В разделе «API и аутентификация» нажмите «API» и включите API Google Mirror для своего нового проекта.
- В разделе «API и аутентификация» нажмите «Учетные данные» , затем нажмите «Создать новый идентификатор клиента». Установите флажок « Учетная запись службы» , чтобы создать новый идентификатор клиента OAuth 2.0 для проекта.
- Всплывающее окно сообщит вам, что закрытый ключ загружается на ваш компьютер, и предоставит вам пароль для этого закрытого ключа. Как только вы закроете это окно, вы не сможете загрузить этот закрытый ключ или снова увидеть пароль. Если они когда-либо потеряются, вы должны создать новый.
- Запишите адрес электронной почты учетной записи службы, который вам понадобится позже для вызова API.
Предоставление метаданных о вашей стеклянной посуде
Когда вы будете готовы отправить свою стеклянную посуду, вам необходимо будет предоставить следующую информацию. Это позволяет нам правильно настроить аутентификацию вашей Glassware при ее реализации.
- Ваш URL-адрес аутентификации , на который перенаправляются пользователи при включении вашей Glassware в MyGlass.
- Тип учетной записи (строка, которую вы будете использовать при вызове API-интерфейсов Android
AccountManager
на устройстве Glass). - Имя пакета вашего приложения из вашего
AndroidManifest.xml
- Числовой идентификатор проекта Google API проекта, который вы создали выше.
- APK для загрузки на MyGlass. Для тестирования вам нужно предоставить этот APK только один раз, чтобы обеспечить первоначальную загрузку, когда ваша стеклянная посуда включена из MyGlass; после этого вы можете выполнять итерацию и отладку локально, перезаписав APK на своем устройстве. Обратите внимание, что этот APK должен соответствовать следующим критериям:
- Он должен быть выровнен по молнии.
- После этого вы не должны вносить никаких изменений в имя пакета или закрытый ключ подписи (менеджер пакетов 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
, Mirror API передает учетную запись на устройство(а) пользователя Glass, где теперь вы можете получить к ней доступ с помощью классаAccountManager
.
Рекомендуемые потоки аутентификации
Следуйте этим рекомендациям, чтобы реализовать удобный для пользователя процесс аутентификации:
- Оптимизируйте свой поток для мобильных устройств.
- Если у вашего потока есть область действия и пользователь отменяет ее, подготовьте хорошо продуманное сообщение об ошибке.
- Убедитесь, что запрошенные вами прицелы действительно используются в вашей стеклянной посуде.
- Если учетную запись пользователя можно подключить, убедитесь, что вы ее подключили.
- По возможности пользовательские данные должны сохраняться в облаке.
Чтобы обеспечить согласованность аутентификации Glassware, используйте один из следующих потоков аутентификации:
Зеркало или гибрид без аккаунта
- После включения в MyGlass ваш URL-адрес аутентификации откроется во всплывающем окне.
- Это напрямую отправляет пользователя в области принятия.
- После того как пользователь примет или отменит области действия, закройте всплывающее окно.
Зеркало с аккаунтом
- После включения в MyGlass ваш URL-адрес аутентификации откроется во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте его непосредственно в области.
- Если пользователь не вошел в систему, покажите поля входа, разрешите ему войти в вашу службу, а затем отправьте их в области.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи. У пользователей должна быть возможность создать учетную запись в рамках процесса установки.
- Пользователь принимает области действия.
- Если ваша стеклянная посуда имеет настраиваемые параметры, отправьте пользователя на страницу настроек с выбранными разумными значениями по умолчанию.
- Если ваша стеклянная посуда не имеет настраиваемых параметров, отправьте пользователя на страницу подтверждения. Закройте всплывающее окно, если дополнительная настройка не требуется.
Гибрид с учетной записью
- После включения в MyGlass ваш URL-адрес аутентификации откроется во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте его непосредственно в области.
- Если пользователь не вошел в систему, покажите поля входа, разрешите ему войти в систему, а затем отправьте их в области.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи.
- Пользователь принимает области действия.
- Отправьте запрос к Mirror API, чтобы вставить учетную запись GDK.
- Отправьте пользователя на страницу настроек с выбранными разумными значениями по умолчанию.
- Отправьте пользователю страницу подтверждения. Закройте всплывающее окно, если дополнительная настройка не требуется.
Зеркальное или гибридное решение с учетной записью и настраиваемыми областями действия.
- После включения в MyGlass ваш URL-адрес аутентификации откроется во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте пользователя в свои внутренние области.
- Если пользователь не вошел в систему, покажите поля входа, разрешите ему войти в систему, а затем отправьте их в свои внутренние области.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи.
- Когда пользователь примет ваши пользовательские области, отправьте пользователя в области Google.
- Отправьте запрос к Mirror API, чтобы вставить учетную запись GDK.
- Отправьте пользователя на страницу настроек с выбранными разумными значениями по умолчанию.
- Отправьте пользователю страницу подтверждения. Закройте всплывающее окно, если дополнительная настройка не требуется.
Зеркало или гибрид с приложением для Android/iPhone
- После включения в MyGlass ваш URL-адрес аутентификации откроется во всплывающем окне.
- Это напрямую отправляет пользователя в области принятия.
- После того, как пользователь примет области:
- Если у пользователя есть сопутствующее приложение и он прошел проверку подлинности, закройте всплывающее окно.
- Если нет, отправьте пользователя на межстраничное объявление, предлагающее загрузить приложение из магазина Google Play или магазина iOS.
- После установки приложения и аутентификации закройте всплывающее окно.
ГДК и нет аккаунта
Включение Glassware в MyGlass — это все, что требуется для этого процесса.
ГДК с аккаунтом
- После включения в MyGlass ваш URL-адрес аутентификации откроется во всплывающем окне.
- Если пользователь уже вошел в вашу службу, отправьте его на экран подтверждения.
- Если пользователь не вошел в систему, отобразите поля входа, разрешите ему войти в систему, а затем отправьте его на экран подтверждения.
- Если у пользователя нет учетной записи, укажите ссылку для создания учетной записи.
- Пользователь принимает области действия.
- Отправьте запрос к Mirror API, чтобы вставить учетную запись GDK.
- Отобразите экран подтверждения и закройте его после его отображения в течение короткого периода времени.
Примеры создания аккаунта
По возможности используйте клиентские библиотеки для Mirror API. Это упрощает вызов mirror.accounts.insert
для создания учетной записи.
Необработанный пример HTTP
В приведенном ниже примере показан только URL-адрес запроса и пример ожидаемого тела JSON. Выполнение необработанных HTTP-запросов от имени учетной записи службы намного сложнее (полную информацию см. в разделе «Использование OAuth 2.0 для межсерверных приложений »), поэтому мы рекомендуем вам использовать одну из наших клиентских библиотек Google API, если это возможно, чтобы упростить задачу.
Метод запроса и 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);