GDK Glassware에서 웹 서비스에 대해 사용자를 인증해야 하는 경우 GDK는 사용자가 인증 정보를 입력할 수 있는 API를 제공합니다. Glass 소프트웨어를 설치합니다.
이 API를 사용하면 일관된 사용자를 직접 구현할 수 있는 오버헤드를 피하고 커스텀 인증 스키마가 있습니다
Google API 서비스 계정 만들기
인증이 올바르게 설정되면 웹 앱의 백엔드 Mirror API를 사용하여 사용자의 Glass에 계정 정보를 전송합니다. 사용자 인증 정보를 제공해야 합니다
이 API에 액세스하려면 Google API 프로젝트를 만든 다음 '서비스 계정'의 클라이언트 ID 만들기 ('웹 애플리케이션'이 아님) 작성자: 서비스 계정을 사용하는 경우 사용자가 사용자 인증 정보를 Glass에 푸시할 수 있는 애플리케이션 권한은 OAuth 권한 페이지와 자체 인증 페이지가 모두 표시됩니다. 확인할 수 있습니다
계정을 만들려면 다음 단계를 따르세요.
- Google Developers Console로 이동합니다.
- 프로젝트 만들기 버튼을 클릭하고 요청된 정보를 입력합니다.
- 프로젝트가 생성되면 프로젝트 번호를 기록해 둡니다. 나중에 필요합니다.
- API 및 인증하려면 API를 클릭하고 Google Mirror API를 사용 설정합니다. 확인할 수 있습니다
- API 및 인증을 클릭하고 사용자 인증 정보를 클릭한 후 새 클라이언트 만들기를 클릭합니다. ID입니다. 서비스 계정 라벨이 지정된 체크박스를 선택하여 새 OAuth 2.0을 만듭니다. 프로젝트에 대한 클라이언트 ID입니다.
- 비공개 키가 다운로드되고 있음을 알리는 팝업 창이 표시됩니다. 해당 개인 키의 비밀번호를 제공합니다. 이 창을 닫으면 비공개 비공개 파일을 다운로드할 수 없습니다. 키를 누르거나 비밀번호를 다시 확인하세요. 키를 잃어버린 경우 새 계정을 만들어야 합니다. 1.
- 필요한 서비스 계정의 이메일 주소를 기록해 둡니다. API를 호출합니다.
Glass 소프트웨어에 대한 메타데이터 제공
Glass 소프트웨어를 제출할 준비가 되면 확인할 수 있습니다 이렇게 하면 Google에서 유리 소프트웨어를 설정하여 올바르게 인증해야 합니다.
- 인증 URL: 사용자가 리디렉션되는 경우 MyGlass에서 Glass 소프트웨어를 켭니다.
- 계정 유형(
Glass 기기의 Android
AccountManager
API) AndroidManifest.xml
의 애플리케이션 패키지 이름- 생성한 프로젝트의 숫자로 된 Google API 프로젝트 ID입니다. 초과
- MyGlass에 업로드할 APK 테스트를 위해
이 APK를 한 번 호출하여 Glass 소프트웨어 앱이 다운될 때 최초 다운로드를
MyGlass에서 켜져 있습니다. 그런 다음 로컬에서 반복하고 디버그할 수 있습니다.
덮어쓰도록 해야 합니다. 이 APK는
다음 기준을 충족해야 합니다.
<ph type="x-smartling-placeholder">
- </ph>
- Zip 정렬해야 합니다.
- 패키지 이름이나 비공개 서명을 변경해서는 안 됩니다. 키를 누르면 됩니다 (Android 패키지 관리자는 (둘 중 하나가 변경될 경우).
- 50MB 미만이어야 합니다.
- 최신 버전의 GDK를 사용하여 컴파일해야 합니다.
인증 흐름 구현
다음 다이어그램은 Google Cloud의 기본 인증 흐름을 보여줍니다. GDK Glass 소프트웨어:
인증 흐름을 구현하려면 다음 안내를 따르세요.
사용자가 MyGlass에서 Glass 소프트웨어를 켜면 리디렉션됩니다. 을 인증 URL에 추가합니다. 이러한 요청에는 나중에 사용해야 하는
userToken
입니다.사용자가 인증 페이지에 자신의 자격 정보를 입력합니다.
서버에서 사용자 인증 정보의 유효성을 검사합니다. 사용자 인증 정보가 유효하면
mirror.accounts.insert
메서드에 Mirror API 호출을 실행합니다. 이 방법 먼저https://www.googleapis.com/auth/glass.thirdpartyauth
범위 서비스 객체를 미러링합니다. 원시 데이터를 사용하여 이 API를 호출하는 예 HTTP 또는 Java는 계정 생성 예에 나와 있습니다.아래에 제공하는 매개변수와 요청 본문은 Android의
AccountManager
에 제공할 정보( 기기에서 직접 계정을 생성했습니다.속성 이름 값 설명 features[]
문자열 목록 기능 목록( <ph type="x-smartling-placeholder"></ph> AccountManager.hasFeatures
).password
문자열 계정 비밀번호( <ph type="x-smartling-placeholder"></ph> AccountManager.getPassword
). 권장 조치 사용자의 실제 비밀번호를 저장하지 않도록 대신 이 필드를 사용하여 수명이 긴 새로고침 토큰과 같은 데이터를 저장하는 데 사용됩니다userData[]
객체 목록 계정과 연결된 하나 이상의 사용자 데이터 쌍입니다. 페이지를 참조하세요. AccountManager.getUserData
).userData[].key
문자열 특정 사용자 데이터 키-값과 연결된 키입니다. 페어링합니다. userData[].value
문자열 특정 사용자 데이터 키-값과 연결된 값입니다. 페어링합니다. authTokens[]
객체 목록 계정과 연결된 하나 이상의 인증 토큰입니다. 페이지를 참조하세요. AccountManager.getAuthToken
).authTokens[].type
문자열 인증 토큰의 유형입니다. authTokens[].authToken
문자열 인증 토큰입니다. mirror.account.insert
요청을 수신하면 Mirror API가 사용자의 Glass 기기로 계정을 연결하여 이제 해당 기기에 액세스할 수 있습니다.AccountManager
클래스를 사용합니다.
권장 인증 흐름
다음 가이드라인에 따라 사용자 친화적인 인증 흐름을 구현하세요.
- 모바일 기기에 맞게 플로우를 최적화하세요.
- 흐름에 범위가 있고 사용자가 이를 취소하는 경우 잘 설계된 흐름 오류 메시지가 표시됩니다.
- 요청한 범위가 Glass 소프트웨어에서 실제로 사용되고 있는지 확인합니다.
- 사용자 계정을 연결할 수 있는 경우 연결했는지 확인합니다.
- 가능한 경우 사용자 데이터는 클라우드에 백업해야 합니다.
Glass 소프트웨어 인증의 일관성을 유지하려면 다음 중 하나를 사용하세요. 인증 흐름을 제공합니다.
계정 없이 미러링 또는 하이브리드
- MyGlass에서 전환하고 나면 인증 URL이 팝업에서 열립니다.
- 이렇게 하면 사용자가 수락할 범위로 바로 이동하게 됩니다.
- 사용자가 범위를 수락하거나 취소하면 팝업을 닫습니다.
계정으로 미러링
- MyGlass에서 전환하고 나면 인증 URL이 팝업에서 열립니다.
- 사용자가 이미 서비스에 로그인한 경우 사용자를 직접 보냅니다. 할 수 있습니다
- 사용자가 로그인하지 않은 경우 로그인 입력란을 표시하고 사용자가 로그인할 수 있도록 허용합니다. 범위로 보낸 후 범위로 보내야 합니다
- 사용자가 계정이 없는 경우 있습니다. 사용자는 설치 흐름 프로세스를 시작합니다.
- 사용자가 범위를 수락합니다.
- Glass 소프트웨어에 구성 가능한 설정이 있는 경우 사용자를 적절한 기본값이 선택되어 있는 설정 페이지
- Glass 소프트웨어에 구성할 수 있는 설정이 없는 경우 사용자를 확인 페이지 추가 구성이 없는 경우 팝업 닫기 필요합니다.
계정이 있는 하이브리드
- MyGlass에서 전환하고 나면 인증 URL이 팝업에서 열립니다.
- 사용자가 이미 서비스에 로그인한 경우 사용자를 직접 보냅니다. 할 수 있습니다
- 사용자가 로그인하지 않은 경우 로그인 입력란을 표시하고 사용자가 로그인하도록 허용합니다. 범위로 보내야 합니다
- 사용자에게 계정이 없는 경우 계정을 만들 수 있는 링크를 제공합니다.
- 사용자가 범위를 수락합니다.
- Mirror API에 GDK 계정 삽입 요청을 전송합니다.
- 적절한 기본값이 선택된 설정 페이지로 사용자를 안내합니다.
- 사용자에게 확인 페이지를 보냅니다. 추가 설명이 없으면 팝업을 닫습니다. 필수 구성 항목입니다.
계정 및 커스텀 범위로 미러링 또는 하이브리드
- MyGlass에서 전환하고 나면 인증 URL이 팝업에서 열립니다.
- 사용자가 이미 서비스에 로그인한 경우 사용자를 내부 범위
- 사용자가 로그인하지 않은 경우 로그인 입력란을 표시하고 사용자가 로그인하도록 허용합니다. 내부 스캐닝으로 보낸 다음
- 사용자에게 계정이 없는 경우 계정을 만들 수 있는 링크를 제공합니다.
- 사용자가 맞춤 범위를 수락하면 사용자를 Google의 범위로 안내합니다.
- Mirror API에 GDK 계정 삽입 요청을 전송합니다.
- 적절한 기본값이 선택된 설정 페이지로 사용자를 안내합니다.
- 사용자에게 확인 페이지를 보냅니다. 추가 설명이 없으면 팝업을 닫습니다. 필수 구성 항목입니다.
Android/iPhone 앱으로 미러 또는 하이브리드 모드 사용
- MyGlass에서 전환하고 나면 인증 URL이 팝업에서 열립니다.
- 이렇게 하면 사용자가 수락할 범위로 바로 이동하게 됩니다.
- 사용자가 범위를 수락한 후:
<ph type="x-smartling-placeholder">
- </ph>
- 사용자가 호환 앱을 보유하고 있고 인증된 경우 팝업을 닫습니다. 창
- 그렇지 않은 경우 앱을 다운로드하도록 안내하는 전면 광고로 사용자를 안내합니다. Google Play 스토어 또는 iOS 스토어의 앱
- 앱을 설치하고 인증한 후 팝업 창을 닫습니다.
GDK 및 계정 없음
MyGlass에서 Glass 소프트웨어를 켜기만 하면 됩니다.
계정이 있는 GDK
- 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..." }
]
}
요청 URL의 {userToken}
를
인증 URL을 입력합니다.
인증 흐름 구현
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
검색 및 사용
개체는 표준 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);