2015-02-02 2 views
1

서비스 계정이있는 Google Apps 도메인의 Admin SDK 디렉토리 API에 대한 액세스 권한을 부여하고 싶습니다. 내가 이해할 때 JWT claim with a sub field이 필요하며 나는 술집 패키지 googleapis_auth (0.2.2)에서 찾을 수 없다.다트 googleapis_auth (0.2.2)를 사용하여 서비스 계정이 포함 된 Google Apps 도메인의 Admin SDK 디렉토리 API 승인

누락 된 경우 :

해결 방법이 있습니까? 향후 버전에 포함될 예정입니까? 시간 나는 사용자의 동의 (관리자 계정)으로 승인 설치된 응용 프로그램과 함께지고있어하지만 조금 지루한 것에 대해

...

+0

https://pub.dartlang.org/packages/dart_jwt를 사용할 수 있습니다 (예 : https://pub.dartlang.org/packages/shelf_auth_session에서 사용) –

+0

Google Apps에는 클레임 ​​세트에 하위 필드가 있어야합니다. 관리자의 이메일 주소. 이 패키지에 포함시킬 방법을 찾을 수 없습니다. 어쩌면 내가 뭔가를 놓친거야? 감사합니다 –

+0

당신은 아무것도 놓치지 않았습니다. 서비스 계정 자격 증명을 만들면 사용자가 클레임의 하위 필드를 가장하여 채우도록 설정할 수 없습니다. 나는 [Issue 15] (https://github.com/dart-lang/googleapis_auth/issues/15)를 제출했습니다 – sgjesse

답변

1

는 가장 할 사용자를 설정하는 데 사용할 수있는 옵션라는 이름의 인수 impersonatedUser 있습니다.

[email protected] 다음과 같습니다 관리자 사용자를 대신하여, 서비스 계정으로 Google Apps 도메인의 관리자 SDK 디렉토리 API를 사용하는 모든 사용자를 나열하는 코드 :

import 'package:googleapis/admin/directory_v1.dart'; 
import 'package:googleapis/drive/v2.dart'; 
import 'package:googleapis_auth/auth_io.dart'; 

final credentials = new ServiceAccountCredentials.fromJson({ 
    "private_key_id": "<please fill in>", 
    "private_key": "<please fill in>", 
    "client_email": "<please fill in>", 
    "client_id": "<please fill in>", 
    "type": "service_account" 
}, user: '[email protected]'); 

const SCOPES = const [AdminApi.AdminDirectoryGroupScope, 
         AdminApi.AdminDirectoryUserScope]; 
void main() { 
    clientViaServiceAccount(credentials, SCOPES).then((http_client) { 
    var admin = new AdminApi(http_client); 
    admin.users.list(domain: 'domain.com').then((Users users) { 
     users.users.forEach((user) => print(user.name.fullName)); 
    }); 
    }); 
} 
+1

저는 googleapis_auth 0.2.3을 사용하고 있으며 정상적으로 작동합니다. 나는 당신의 코드 예제가 "impersonatedUser : [email protected]"이어야한다고 생각한다. "고마워! –

0

나는 https://github.com/dart-lang/googleapis_auth#autonomous-application--service-account에 설명 된대로이 지원됩니다 믿습니다. 버전 0.2.3에서는 ServiceAccountCredentials의 생성자에 사용자 이름을 가장 할 수있는 이름이 지정된 impersonatedUser이라는 선택적 이름이 추가되었습니다. ServiceAccountCredentials에 대한 googleapis_auth 생성자의 버전 0.2.3와

import "package:http/http.dart" as http; 
import "package:googleapis_auth/auth_io.dart"; 

var accountCredentials = new ServiceAccountCredentials.fromJson({ 
    "private_key_id": "<please fill in>", 
    "private_key": "<please fill in>", 
    "client_email": "<please fill in>@developer.gserviceaccount.com", 
    "client_id": "<please fill in>.apps.googleusercontent.com", 
    "type": "service_account" 
}, impersonatedUser: '[email protected]'); 
var scopes = [...]; 

... 

var client = new http.Client(); 
obtainAccessCredentialsViaServiceAccount(accountCredentials, scopes, client) 
    .then((AccessCredentials credentials) { 
    // Access credentials are available in [credentials]. 
    // ... 
    client.close(); 
}); 
+0

Google Apps에는 관리자의 이메일 주소가 포함 된 소유권 주장 집합에 하위 필드가 필요합니다. googleapis_auth에 포함시킬 방법을 찾을 수 없습니다. 어쩌면 내가 뭔가를 놓친거야? 감사합니다. –

+0

Google은'iss','aud','scope','exp' 및'iat' 만 필요로하며,'iss'는 'client_email'으로 설정되어 있습니다. –

+0

나는 여기에 깊은 바다에 있다는 것을 인정하지만이 페이지의 "추가 클레임"에 나오는 내용을 어떻게 해석합니까? https://developers.google.com/accounts/docs/OAuth2ServiceAccount –

관련 문제