Menggunakan AuthSub di ActionScript

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

Catatan: Jika Anda sudah memahami AuthSub, layanan autentikasi akun Google untuk aplikasi berbasis web, Anda akan melihat bahwa AuthSub untuk ActionScript secara konseptual sangat mirip. Implementasi yang mendasarinya berbeda, tetapi perbedaan tersebut tidak penting bagi Anda sebagai developer aplikasi klien. Dalam beberapa dokumentasi, dalam konteks yang tidak relevan, kami menyebut AuthSub untuk ActionScript sebagai "AuthSub" saja.

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

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

Lihat juga Grup API Akun Google untuk diskusi tentang penggunaan semua API layanan Autentikasi.

Audiens

Dokumen ini ditujukan bagi 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. Selain itu, Anda dianggap telah memahami cara memprogram di ActionScript.

Lingkungan yang didukung

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

Cara kerja AuthSub untuk ActionScript

Berikut ringkasan singkat tentang cara kerja komunikasi antara aplikasi web, layanan Autentikasi Google, 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 seperti itu, aplikasi web harus mendapatkan token melalui AuthSub. Untuk mendapatkan token, aplikasi web membuat panggilan login AuthSub untuk ActionScript ke layanan Autentikasi, dengan menentukan layanan yang akan diakses.
  2. Setelah menerima permintaan dari aplikasi web, layanan Autentikasi akan 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 pengguna menolak akses, mereka akan diarahkan ke halaman Google, bukan kembali ke aplikasi web.
  4. Jika pengguna berhasil login dan memberikan akses, layanan Autentikasi akan mengalihkan pengguna kembali ke URL aplikasi web yang melakukan panggilan asli. Pengalihan memberikan token autentikasi untuk layanan yang ditentukan melalui parameter kueri. Aplikasi harus menyimpan token sebagai cookie di browser pengguna, di domain aplikasi web. Token valid hingga dicabut. (Lihat bagian Tentang token untuk mendapatkan saran tentang kapan harus mencabut token.)
  5. Aplikasi web menghubungi layanan Data Google dan mengirim token autentikasi bersama dengan setiap permintaan yang dikirim ke layanan.
  6. Jika layanan Data Google mengenali token, layanan tersebut akan menyediakan data yang diminta.

Menggunakan antarmuka AuthSub untuk ActionScript

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

AuthSubAS menyediakan mirror 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 mendapatkan token autentikasi dan menggunakannya untuk mengakses layanan Google dari aplikasi Flash.

  1. Siapkan kebijakan lintas-domain.

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

    <?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

    Perhatikan bahwa di sini kita memuat kebijakan untuk accounts.googleapis.com (AuthSubAS) dan untuk photos.googleapis.com/data (PicasaWeb, yang diakses contohnya nanti).

  2. Minta token sekali pakai.

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

          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 scope. Setiap layanan Google menentukan cakupan akses yang diizinkannya, 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. Cakupan terlihat seperti URL; cakupan dapat berupa URL sederhana yang mengidentifikasi layanan, atau dapat menentukan akses yang lebih terbatas, seperti membatasi akses hanya untuk baca. Jika layanan menawarkan pilihan cakupan, minta token dengan cakupan paling ketat yang memungkinkan. 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. Namun, jika Anda memeriksa dan mengalihkan segera setelah pemuatan, 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 akan mengarahkan mereka kembali ke halaman Anda; jadi dari sudut pandang pengguna, mereka mencoba mengunjungi halaman Anda, tetapi dialihkan dan tidak pernah dikembalikan. Skenario ini dapat membingungkan dan membuat pengguna frustrasi.
    • Aplikasi yang perlu mengakses 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 menyetel URL browser pengguna ke http://yourWebAppUrl?token=singleUseToken. Setelah menerima token sekali pakai, aplikasi Anda harus menukarnya dengan token penggunaan ganda (berjangka panjang), yang kemudian dapat digunakan untuk membuat permintaan terhadap feed Data Google. Untuk melakukannya, panggil metode AuthSubSessionToken dengan token penggunaan tunggal.

    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 tersebut akan 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 harus membuka halaman konfirmasi AuthSub setiap kali mereka ingin menggunakan aplikasi Anda.

  4. Menggunakan token autentikasi.

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

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

    Contoh di ActionScript 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 penyediaan fitur logout manual, seperti tombol logout atau link yang dapat diklik. Pendekatan tersebut memberi pengguna opsi untuk logout kapan pun mereka mau, atau tetap login dan menjaga feed data mereka tetap tersedia dengan mudah untuk saat berikutnya mereka mengakses aplikasi Anda.

Tentang token

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

Setiap token autentikasi khusus 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 tertentu.

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 AuthSub untuk antarmuka ActionScript dapat digunakan sebanyak yang diperlukan hingga dicabut. Aplikasi Anda yang akan mengelola masa berlaku token, menyeimbangkan keamanan dengan kenyamanan. 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 ActionScript tidak didukung untuk layanan tersebut. Untuk menggunakan token aman, organisasi Anda harus mendaftarkan sertifikat SSL ke Google dan menandatangani semua permintaan untuk feed data tersebut.

Kembali ke atas