2012-07-24 41 views
7

Drive SDK mới rất tốt cho người dùng được xác thực. Có thể sử dụng Drive SDK bằng quyền truy cập quản trị Google Apps để mạo danh người dùng miền khác không?Quản trị viên Google Apps có thể quản lý tệp người dùng bằng SDK Drive không?

API doclist có thể thực hiện nhưng không thể quản lý và sao chép tệp (pdf, jpg) bằng công cụ này.

Tôi đang sử dụng Java với mã này:

credential_origine = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
        .setJsonFactory(JSON_FACTORY) 
        .setServiceAccountId("[email from console api]") 
        .setServiceAccountScopes(DriveScopes.DRIVE) 
        .setServiceAccountUser("[email protected]") 
        .setServiceAccountPrivateKeyFromP12File(new File("key.p12")).build(); 

Nhưng tôi nhận được một lỗi khi tôi cố gắng để lấy dữ liệu cho [email protected] Nếu tôi nhận xét .setServiceAccountUser("[email protected]") mã hoạt động tuyệt vời cho cùng một tài khoản tôi đã sử dụng để tạo khóa.

Trong API DOCList cũ, chúng tôi đã mạo danh một người dùng khác theo URL của các yêu cầu. Có gì tương tự không?

+0

Bạn đang gặp phải lỗi gì?Đảm bảo thêm ID khách hàng đã tạo từ Bảng điều khiển API trong cPanel của miền của bạn như được mô tả [tại đây] (http://support.google.com/a/bin/answer.py?hl=vi&answer=162106). – Alain

+0

Hi Alain, Nó hoạt động tốt ngay bây giờ, có lẽ tôi đã sai với ServiceAccountUser. Tôi nhận được 500 Lỗi Máy chủ Nội bộ khi tôi cố gắng thay đổi chủ sở hữu của Tệp bằng cả updatePermission và patchPermission ... có thể vì một tệp phải có chủ sở hữu..Tôi sẽ thử lại, cảm ơn sự giúp đỡ – Ridgh

+0

@Ridgh bạn có thể cung cấp cho cho tôi một số ý tưởng về việc truy cập tài liệu người dùng bằng SDK quản trị. Hiện tại tôi đang làm việc trên tài liệu người dùng –

Trả lời

4

Bạn có thể làm điều đó bằng cách sử dụng Service Accounts và chỉ định người dùng mạo danh khi xây dựng khiếu nại xác nhận của bạn.

Khi bạn đã tạo khóa tài khoản dịch vụ trong dự án API của mình (từ APIs Console), bạn sẽ phải thêm dự án này vào danh sách ứng dụng bên thứ ba được ủy quyền trong cPanel. Thông tin thêm về điều này có thể được tìm thấy here. "Id ứng dụng khách" bạn cần sử dụng là khóa được liên kết với khóa Tài khoản dịch vụ và trông giống như <APP_ID>-<OTHER_KEY>.apps.googleusercontent.com

Vì bạn muốn quản lý tệp người dùng khác, bạn sẽ phải ủy quyền cho phạm vi rộng Drive: https://www.googleapis.com/auth/drive.

Hầu hết thư viện khách hàng của chúng tôi đều quan tâm đến việc trừu tượng hóa thế hệ xác nhận quyền sở hữu cho nhà phát triển. Nếu bạn có thể chỉ định ngôn ngữ bạn định sử dụng, tôi có thể cập nhật câu trả lời này bằng cách cung cấp đoạn mã để giúp bạn bắt đầu.

+0

Có thư viện Ruby nào để thực hiện việc này không? – tbeseda

+0

Thư viện khách hàng của Google dành cho Ruby không hỗ trợ Tài khoản dịch vụ: https://code.google.com/p/google-api-ruby-client/wiki/ServiceAccounts – Alain

0

nâng cấp:

mã:

com.google.api.client.googleapis.auth.oauth2.GoogleCredential.Builder credential_origine_builder = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
        .setJsonFactory(JSON_FACTORY) 
        .setServiceAccountId("[[]]") 
        .setServiceAccountScopes(DriveScopes.DRIVE) 
        .setServiceAccountPrivateKeyFromP12File(new File("cfg/file.p12")); 

credential_origine_builder.setServiceAccountUser("[email protected]"); 

hoạt động tốt.

Nếu chúng ta thay đổi .setServiceAccountScopes(DriveScopes.DRIVE) để

.setServiceAccountScopes(DriveScopes.DRIVE,Oauth2Scopes.USERINFO_EMAIL,Oauth2Scopes.USERINFO_PROFILE) 

để lấy tên và ID của người sử dụng Nó có vẻ không tương thích với .setServiceAccountUser("[email protected]");

Sử dụng 3 phạm vi hoạt động tốt chỉ với người sử dụng "chủ sở hữu "của các phím ... tiếp tục xây dựng

+0

Bạn đã cấp các phạm vi bổ sung đó khi bạn định cấu hình truy cập oAuth trong cpanel? Từ trợ giúp cpanel của Google: Đối với mỗi khách hàng, bạn có thể chỉ định nhiều API, được phân tách bằng dấu phẩy. Ví dụ: để cho phép truy cập vào cả API Danh sách liên hệ và Danh sách tài liệu: "http://www.google.com/m8/feeds/, http://docs.google.com/feeds/" – David

+0

David, trong mã của tôi Tôi chắc chắn đã thêm phạm vi, trên bảng điều khiển Google Api Tôi không thấy phạm vi này, Tôi có sai không ?. Tôi đã sử dụng các cài đặt nhóm api cộng với việc cung cấp luồng api và oauth 2.0 một cách chính xác. Câu hỏi của tôi là về tài liệu api + api drive và tài khoản dịch vụ Oauth flow ... Tôi hy vọng sẽ chỉ sử dụng ổ đĩa sdk nhưng nó không thể quản lý quyền (trường email không được trả lại cho quyền riêng tư) .. – Ridgh

0

OK đây là mã hoàn chỉnh trong Dartlang để liệt kê mạo danh USER @ YOUR_DOMAIN tệp người dùng có khóa JSON

Để chạy nó, bạn sẽ cần phải tạo ra chìa khóa JSON (thay vì P12) thông qua Google Developer Console (trong ngữ cảnh của dự án: Apis & auth -> credentials) generate JSON key

phụ thuộc

Dart dự án trong pubspec.yaml: googleapis googleapis_auth async)

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

final _credentials = new ServiceAccountCredentials.fromJson(r''' 
{ 
    "private_key_id": "*PRIVATE_KEY_ID*", 
    "private_key": "*PRIVATE_KEY_CONTENT*", 
    "client_email": "*[email protected]*", 
    "client_id": "*SOMETHING.apps.googleusercontent.co*m", 
    "type": "service_account" 
} 
''', impersonatedUser: "*[email protected]_DOMAIN*"); //here you type user 

const _SCOPES = const [DriveApi.DriveScope]; 

main() async { 
    var http_client = await clientViaServiceAccount(_credentials, _SCOPES); 
    var drive = new DriveApi(http_client); 
    var docs = await drive.files.list(maxResults: 10); 

    for (var itm in docs.items) { 
    print(itm.title); //list docs titles 
    } 
} 
Các vấn đề liên quan