2013-07-30 15 views
7

Google'ın yeni Yönetici SDK'sını kullanmakta güçlük çekiyorum. Özellikle Oauth2'yi kullanan Directory API. Sanırım neredeyse oradayım ama Directory API'sini (bir Google Education Edition alanı kullanıyorum) kullanarak kullanıcı ayrıntılarını almaya çalışıyorum.Bir Hizmet Hesabı için Oauth2'yi Kullanan Google Yönetici API'sı (Eğitim Sürümü) - 403 Hatası

Temelde benim yapmaya çalışıyorum hükümler veya de-hükümler Kullanıcıların AD tarafından yönetilmektedir onların kayıt durumuna göre bir piton senaryo yazmaya olduğunu. Oauth1 kullanarak bunu yapan ancak Oauth2'yi kullanmak için güncellemek isteyen bir komut dosyası var.

İşte bulduğum bazı örneklere dayanan bir kod parçacığı.

f = file('test_key.p12', 'rb') 
key = f.read() 
f.close() 
credentials = SignedJwtAssertionCredentials(
    '[email protected]', 
    key, 
    scope= 'https://www.googleapis.com/auth/admin.directory.user') 
http = httplib2.Http() 
http = credentials.authorize(http) 
service = build(serviceName='admin', version='directory_v1', http=http) 

lists = service.users().get(userKey='[email protected]').execute(http=http) 
pprint.pprint(lists) 

Bu kod parçası doğru bağlamak görünüyor ama sorguyu yürütmek için denediğimde 403 hatası alıyorum.

HATA: https://www.googleapis.com/admin/directory/v1/users/[email protected]?alt=json döndü "bu kaynak/api erişmeye Yetkili Değil">

Ben yöneticiler konsola ( Google API's console) ama ben bu API açık değil çünkü

ilk düşüncem oldu. (Gerçekten de Yönetici SDK'sını çalıştırdım ve onun çalışacağı Yönetici SDK'sının bir parçası olduğunu görmek için Directory API olmadığı için Directory SDK'yı açtım).

ben eksik ya da ben bir yere aptalca bir hata yapmış bir adım var mı?

+0

Bunu anladın mı? Özellikle, Directory API'sinin (a.k.a. Yönetici SDK API'sı) bir hizmet hesabı ve OAuth 2.0 ile birlikte kullanılıp kullanılamayacağını merak ediyorum. (Diğer API'leri tanıyabilirim.) OAuth 1.0 ile yapabildiğim hissi alıyorum ama bunu henüz denemedim. –

+0

@EricWalker - Evet aşağıdaki yorumlara bakın. – Bruce

cevap

6

Bruce

sen çok yakınsın: Yukarıdaki linke itibaren bu bölüme not edin. öğelerin

Çift: Eğer (değiştirilmekte olan kullanıcı değil) taklit ediyorsunuz kime

Yani tam kod biraz aşağıdaki gibi görünecektir:

# domain configuration settings 
    import domainconfig 

    f = file(domainconfig.KEY_FILE, "rb") # b reads file in binary mode; not strictly necessary, but safer to avoid strange Windows EOL characters: https://stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode 
    key = f.read() 
    f.close() 

    credentials = SignedJwtAssertionCredentials(

     domainconfig.SERVICE_ACCOUNT_EMAIL, 
     key, 
     scope = domainconfig.SCOPE, 
     sub=domainconfig.SUB_ACCOUNT_EMAIL # 'sub' supercedes the deprecated 'prn' 

    ) 

    http = httplib2.Http() 
    http = credentials.authorize(http) 

    directoryservice = build("admin", "directory_v1", http=http) 

    users = directoryservice.users() 
    response = users.get(userKey='[email protected]').execute() 
+0

Biri Ruby ve Google'ın 'Signet'i kullanıyorsa, şu anda bir yönetici veya bir temsilci rolü olan bir kullanıcının kimliğine bürünmek için kütüphanede bazı değişiklikler yapılması gerekir; bakın: https://github.com/google/signet/pull/33 –

0

Bu yardım olmalıdır: https://developers.google.com/drive/delegation

değişmesini olacak kullanıcıya bağlanması gereken kimlik bilgilerini iddia.

credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, 
scope='https://www.googleapis.com/auth/drive', sub=user_email) 
İlgili konular