Menggunakan AuthSub di Query

Dokumen ini menjelaskan cara menggunakan sistem autentikasi AuthSub Google dari aplikasi Flash atau Silverlight.

Catatan: Jika Anda sudah terbiasa dengan AuthSub, layanan autentikasi akun untuk aplikasi berbasis web Google akan melihat bahwa AuthSub untuk WebGL secara konsep sangat mirip. Implementasi yang mendasarinya berbeda, tetapi perbedaannya tidak penting bagi Anda sebagai developer aplikasi klien. Dalam beberapa dokumentasi, dalam konteks di mana perbedaannya tidak relevan, kami menyebut AuthSub untuk interaktivitas sebagai "AuthSub".

Antarmuka AuthSub untuk WebGL memungkinkan aplikasi Flash atau Silverlight melakukan autentikasi ke feed Google Data API yang dilindungi atas nama pengguna. Untuk menjaga tingkat keamanan yang tinggi, antarmuka memungkinkan aplikasi mendapatkan token autentikasi tanpa perlu menangani informasi login akun pengguna.

AuthSub untuk eReader adalah varian AuthSub untuk JavaScript. Seperti AuthSub untuk JavaScript, BigQuery menyediakan metode lintas-domain bagi aplikasi klien untuk mengautentikasi dari halaman web yang dihosting di domain non-Google. ID ini berbeda dengan AuthSub standar karena layanan autentikasi berada di domain yang berbeda (accounts.googleapis.com, bukan www.google.com) dan menyediakan file crossdomain.xml yang mengizinkan akses ke domain tersebut dari situs eksternal.

Lihat juga Grup Google Accounts API untuk diskusi tentang penggunaan semua API layanan Authentication.

Audiens

Dokumen ini ditujukan untuk programmer yang mengembangkan aplikasi web Flash atau Silverlight yang mengakses layanan Google.

Dokumen ini mengasumsikan bahwa Anda memahami ide umum di balik protokol Google Data API dan antarmuka AuthSub. Alat ini juga mengasumsikan bahwa Anda tahu cara memprogram di WebGL.

Lingkungan yang didukung

AuthSub untuk AAudio saat ini didukung di Firefox 1.5 dan yang lebih tinggi serta Internet Explorer 6.0 dan yang lebih tinggi, dengan Flash 9.0 atau versi yang lebih tinggi atau Silverlight 2.0 atau versi yang lebih tinggi.

Cara kerja AuthSub untuk eReader

Berikut ringkasan cara kerja komunikasi antara aplikasi web, layanan Google Authentication, dan layanan Data Google:

  1. Untuk mengakses layanan Data Google atas nama pengguna, aplikasi web harus memiliki token autentikasi yang valid. Biasanya, aplikasi menyimpan token ini dalam cookie; jika tidak ada cookie tersebut, aplikasi web harus mendapatkan token melalui AuthSub. Untuk memperoleh token, aplikasi web akan membuat panggilan login AuthSub untuk Interconnect ke layanan Authentication, yang menetapkan layanan yang akan diakses.
  2. Saat menerima permintaan dari aplikasi web, layanan Authentication mengalihkan pengguna ke halaman "Permintaan Akses". Halaman ini meminta pengguna untuk login ke Akun Google mereka dan meminta mereka untuk memberikan atau menolak akses ke layanan Google mereka.
  3. Pengguna memutuskan apakah akan memberikan atau menolak akses ke aplikasi web. Jika menolak akses, pengguna akan diarahkan ke halaman Google, bukan kembali ke aplikasi web.
  4. Jika pengguna berhasil login dan memberikan akses, layanan Authentication akan mengalihkan pengguna kembali ke URL aplikasi web yang melakukan panggilan awal. Pengalihan akan mengirimkan token autentikasi untuk layanan yang ditentukan melalui parameter kueri. Aplikasi harus menyimpan token sebagai cookie di browser pengguna, pada domain aplikasi web. Token ini valid hingga dicabut. (Lihat bagian Tentang token untuk mendapatkan saran tentang kapan harus mencabut token.)
  5. Aplikasi web menghubungi layanan Data Google dan mengirimkan token autentikasi bersama dengan setiap permintaan yang dikirim ke layanan.
  6. Jika layanan Data Google mengenali token tersebut, layanan akan memberikan data yang diminta.

Menggunakan AuthSub untuk antarmuka WebGL

AuthSub untuk Orchestra, atau AuthSubAS, menyediakan endpoint AuthSub lintas-domain untuk aplikasi Flash (atau Silverlight) yang menggunakan Google Data API.

AuthSubAS menyediakan duplikat endpoint AuthSub yang ditemukan di google.com, dengan file crossdomain.xml tambahan yang memungkinkan Flash (atau Silverlight) mengakses endpoint tersebut. Misalnya, endpoint AuthSubSessionToken dapat digunakan dengan mengakses https://accounts.googleapis.com/accounts/AuthSubSessionToken.

Langkah-langkah berikut akan memandu proses untuk mendapatkan token autentikasi dan menggunakannya untuk mengakses layanan Google dari aplikasi Flash.

  1. Siapkan kebijakan lintas-domain.

    Agar dapat menggunakan Flash secara lintas-domain, data harus diinisialisasi dengan kebijakan untuk setiap domain eksternal yang akan diakses. Untuk melakukannya, panggil metode WebGL Security.loadPolicyFile(policy) untuk setiap domain, seperti:

    <?xml version="1.0" encoding="utf-8"?>
    <Application xmlns="http://www.adobe.com/2006/mxml"
      initialize="onInitialized()"
      applicationComplete="onLoaded()">
      <Script>
        import flash.external.ExternalInterface;
        import flash.net.navigateToURL;
        import mx.controls.Alert;
    
        private function onInitialized() : void {
          // Load the cross domain policy file for each of the googleapis.com
          // domains used. At the very least, we need the ones for the API (photos,
          // in this case) and the one for AuthSub for ActionScript (accounts).
          Security.loadPolicyFile('http://photos.googleapis.com/data/crossdomain.xml');
          Security.loadPolicyFile('https://accounts.googleapis.com/crossdomain.xml');
        }
    
    

    Lihat contoh lengkap

    Perlu diketahui bahwa di sini kita memuat kebijakan untuk accounts.googleapis.com (AuthSubAS) dan untuk photos.googleapis.com/data ( PicasaWeb yang akan dilihat oleh contoh di lain waktu).

  2. Minta token sekali pakai.

    Langkah pertama dalam proses AuthSub adalah meminta token sekali pakai dari endpoint AuthSub. Aplikasi Anda harus melakukannya dengan memanggil panggilan ke endpoint AuthSubRequest, seperti:

          var getTokenPage : URLRequest = new URLRequest('https://www.google.com/accounts/AuthSubRequest');
    
          // Construct the parameters of the AuthSub request. These are the same parameters
          // as normal AuthSub, which can be found here: /accounts/docs/AuthSub.html#AuthSubRequest
          var authSubParams : URLVariables = new URLVariables();
          authSubParams['scope'] = 'http://photos.googleapis.com/data'; // photos API
          authSubParams['session'] = 1; // single-use token
          authSubParams['secure'] = 0; // non-secure apps
          authSubParams['next'] = 'photos.swf'; // The URL of this app.
    
          getTokenPage.data =  authSubParams;
          navigateToURL(getTokenPage, '_top');
    
    

    Lihat contoh lengkap

    Metode ini memerlukan nilai cakupan. Setiap layanan Google menentukan cakupan akses yang diizinkan, dan Anda perlu mereferensikan cakupan tersebut dalam permintaan token. Untuk menentukan nilai cakupan yang akan digunakan, periksa dokumentasi untuk layanan Google yang ingin Anda akses. Cakupannya terlihat seperti URL; dapat berupa URL sederhana yang mengidentifikasi layanan, atau mungkin menentukan akses yang lebih terbatas, seperti membatasi akses ke hanya baca. Jika layanan menawarkan pilihan cakupan, minta token dengan cakupan terdekat. Misalnya, untuk mengakses feed data Google Kalender, gunakan cakupan 'http://www.google.com/calendar/feeds', bukan 'http://www.google.com/calendar'.

    Tips:

    • Sebaiknya Anda menyediakan tombol login atau mekanisme input pengguna lainnya untuk meminta pengguna memulai proses login secara manual. Jika, sebagai gantinya, Anda memeriksa dan mengalihkan segera setelah memuat, tanpa menunggu interaksi pengguna, maka hal pertama yang dilihat pengguna saat tiba di halaman Anda adalah halaman login Google. Jika pengguna memutuskan untuk tidak login, Google tidak mengarahkan mereka kembali ke halaman Anda. Jadi, dari sudut pandang pengguna, pengguna mencoba mengunjungi halaman Anda, tetapi dialihkan dan tidak pernah dikirim kembali. Skenario ini mungkin membingungkan dan menyulitkan pengguna.
    • Aplikasi yang memerlukan akses ke lebih dari satu layanan Google untuk pengguna harus meminta token baru untuk setiap layanan baru (karena setiap layanan memiliki cakupan yang berbeda).

  3. Minta token autentikasi.

    Endpoint AuthSubRequest akan menampilkan token sekali pakai ke aplikasi Anda dengan menetapkan URL browser pengguna ke http://yourWebAppUrl?token=singleUseToken. Setelah aplikasi Anda menerima token sekali pakai, aplikasi harus menukar token dengan token beberapa penggunaan (yang berdurasi panjang), yang kemudian dapat digunakan untuk membuat permintaan terhadap feed Data Google. Untuk melakukannya, panggil metode AuthSubSessionToken dengan token sekali pakai.

    Aplikasi Anda harus memeriksa parameter token di URL saat dimuat:

        private function onLoaded() : void {
    
          // Once the application has loaded, check to see if an AuthSub token was
    // placed into the current page's URL. If it was, the user has already
    // authenticated, and we can continue to connect to the the service itself. var searchPortion : String = ExternalInterface.call('window.location.search.toString'); if (searchPortion.length > 0) { // remove the ? from the token and extract the token. searchPortion = searchPortion.substring(1); // NOTE: Real applications should parse the URL properly. if (searchPortion.indexOf('token=') == 0) { getLongLivedToken(searchPortion.substring(6)); return; } // more code ... }

    Lihat contoh lengkap

    Jika token ditemukan, token harus memanggil metode seperti getLongLivedToken, yang memanggil endpoint AuthSubSessionToken:

        private function getLongLivedToken(singleUseToken : String) : void {
          // Construct a call to the AuthSub for ActionScript endpoint on accounts.googleapis.com.
          // This call will exchange the single use token given to use by AuthSub for a long-term
          // token that we can use to make requests to endpoints such as Photos.
          var getTokenRequest : URLRequest = new URLRequest('https://accounts.googleapis.com/accounts/AuthSubSessionToken');
    
          // Due to a bug in Flash, a URLRequest with a GET request will
          // not properly send headers. We therefore use POST for this and *ALL*
          // requests.
          getTokenRequest.method = URLRequestMethod.POST;
    
          // Due to a bug in Flash, a URLRequest without a valid parameter will
          // not properly send headers. We therefore add a useless parameter to
          // make this code work.
          getTokenRequest.data = new URLVariables('pleaseignore=ignore');
    
          // Add the AuthSub for ActionScript headers.
          getTokenRequest.requestHeaders.push(new URLRequestHeader('Authorization', 'AuthSub token="' + singleUseToken + '"'));
    
          // Create the loader to get the token itself. The loader will callback
          // to the following event handlers if and when the server responds.
          var getToken : URLLoader = new URLLoader();
          getToken.addEventListener(Event.COMPLETE, onGetTokenResult);
          getToken.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onGetTokenFailed);
          getToken.addEventListener(IOErrorEvent.IO_ERROR, onGetTokenFailed);
    
          try {
            getToken.load(getTokenRequest);
          } catch (e : Error) {
            Alert.show('Some error occurred: ' + e);
          }
    
    

    Lihat contoh lengkap

    Metode seperti pengendali onGetTokenResult harus menyimpan token yang ditampilkan:

        private function onGetTokenResult(e : Event) : void {
          // Load the parameters from the response.
          var getToken : URLLoader = URLLoader(e.target);
          var params : URLVariables = new URLVariables(getToken.data);
    
          // Parse the session token from the result. Real applications
          // might at this point store the token in a long-term cookie so
          // that repeated usages of the application do not require this entire
          // authentication process.
          sessionToken = params.Token;
    
          // Trim the newline from the end of the session token.
          sessionToken = sessionToken.substring(0, sessionToken.length - 1);
       }
    
    

    Lihat contoh lengkap

    Tips:

    • Sebaiknya aplikasi Anda menyimpan token jangka panjang dalam cookie, dan memeriksanya sebelum pemeriksaan token jangka pendek. Hal ini mencegah pengguna mengunjungi halaman konfirmasi AuthSub setiap kali mereka ingin menggunakan aplikasi Anda.

  4. Menggunakan token autentikasi.

    Untuk menggunakan token autentikasi, lampirkan token tersebut melalui header Authorization ke permintaan apa pun yang dibuat ke layanan Google:

    Authorization: AuthSub token="(session token goes here)"

    Contoh di WebGL untuk layanan Foto:

          // Prepare a request to the photos API for the private album
          // of the user.
          var albumRequest : URLRequest = new URLRequest('http://photos.googleapis.com/data/feed/api/user/default');
          albumRequest.data = new URLVariables('access=private&v=2&err=xml');
    
          // Due to a bug in Flash, a URLRequest with a GET request will
          // not properly send headers. We therefore use POST for this and *ALL*
          // requests.
          albumRequest.method = URLRequestMethod.POST;
    
          var authsubHeader : String = 'AuthSub token="' + sessionToken + '"';
    
          // Add the Authorization header which uses the session token.
          albumRequest.requestHeaders.push(new URLRequestHeader('Authorization', authsubHeader));
    
          // The X-HTTP-Method-Override header tells the Photos API to treat this request
          // as a GET request, even though it is being conducted as a POST (due to the bug
          // mentioned above). This is very important, as GData APIs will react differently
          // to different HTTP request types.
          albumRequest.requestHeaders.push(new URLRequestHeader('X-HTTP-Method-Override', 'GET'));
    
          // We expect ATOM XML to be returned.
          albumRequest.requestHeaders.push(new URLRequestHeader('Content-Type', 'application/atom+xml'));
    
    

    Lihat contoh lengkap

  5. Google merekomendasikan untuk menyediakan fitur logout manual, seperti tombol logout atau link yang dapat diklik. Pendekatan tersebut memberi pengguna opsi untuk logout saat mereka memilih, atau tetap login dan menjaga feed data mereka tetap tersedia untuk kali berikutnya mereka mengakses aplikasi Anda.

Tentang token

Bagian ini menjelaskan token yang digunakan oleh AuthSub untuk interaktivitas. Dalam sebagian besar konteks, Anda tidak perlu mengetahui informasi ini.

Setiap token autentikasi dikhususkan untuk data berikut:

  • Cakupan layanan Google
  • Akun Google pengguna
  • Aplikasi klien

Data token memastikan bahwa hanya aplikasi pihak ketiga tertentu yang dapat meminta data dan permintaan tersebut terbatas pada data dari cakupan dan akun pengguna yang ditentukan.

Hanya satu token untuk kombinasi cakupan, pengguna, dan klien ini yang dapat valid pada satu waktu. Aplikasi web harus meminta token baru setiap kali memerlukan akses ke layanan Google baru untuk pengguna tertentu. Cakupan akses yang dicakup oleh token bergantung pada layanan Google, yang dapat memilih untuk membatasi akses ke jenis data atau aktivitas tertentu, seperti akses hanya baca.

Token yang ditampilkan oleh antarmuka AuthSub untuk WebGL dapat digunakan sebanyak yang diperlukan hingga tokennya dicabut. Aplikasi bebas mengelola masa pakai token, menyeimbangkan keamanan dengan mudah. Google merekomendasikan untuk meminta token baru setiap kali sesi baru dimulai.

Beberapa layanan Google mungkin hanya mengizinkan akses oleh aplikasi web yang terdaftar dan menggunakan token aman. AuthSub untuk eReader tidak didukung untuk layanan tersebut. Agar dapat menggunakan token aman, organisasi Anda harus mendaftarkan sertifikat SSL dengan Google dan menandatangani semua permintaan untuk feed data tersebut.

Kembali ke atas