Aplikasi yang berjalan di platform yang dikelola Google Cloud seperti App Engine dapat menghindari pengelolaan autentikasi pengguna dan pengelolaan sesi dengan menggunakan Identity-Aware Proxy (IAP) untuk mengontrol akses ke aplikasi tersebut. IAP tidak hanya dapat mengontrol akses ke aplikasi, tetapi juga memberikan informasi tentang pengguna yang diautentikasi, termasuk alamat email dan ID persisten ke aplikasi dalam bentuk header HTTP baru.
Tujuan
Mewajibkan pengguna aplikasi App Engine Anda untuk mengautentikasi diri mereka sendiri dengan menggunakan IAP.
Akses identitas pengguna di aplikasi untuk menampilkan alamat email pengguna saat ini yang diautentikasi.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Menyiapkan lingkungan pengembangan.
Menyiapkan project
Di jendela terminal, clone repositori aplikasi contoh ke komputer lokal Anda:
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Ubah ke direktori yang berisi kode contoh:
cd golang-samples/getting-started/authenticating-users
Latar belakang
Tutorial ini menggunakan IAP untuk mengautentikasi pengguna. Ini hanyalah salah satu dari beberapa pendekatan yang mungkin. Untuk mempelajari lebih lanjut berbagai metode untuk mengautentikasi pengguna, lihat bagian Konsep autentikasi.
Aplikasi Hello user-email-address
Aplikasi untuk tutorial ini adalah aplikasi App Engine Hello world minimal,
dengan satu fitur yang tidak biasa: bukan "Hello world", aplikasi ini menampilkan
"Hello user-email-address
", dengan
user-email-address
adalah alamat email pengguna yang diautentikasi.
Fungsi ini dapat dilakukan dengan memeriksa informasi terautentikasi yang ditambahkan IAP ke setiap permintaan web yang diteruskan ke aplikasi Anda. Ada tiga header permintaan baru yang ditambahkan ke setiap permintaan web yang menjangkau aplikasi Anda. Dua header pertama adalah string teks biasa yang dapat Anda gunakan untuk mengidentifikasi pengguna. Header ketiga adalah objek yang ditandatangani secara kriptografis dengan informasi yang sama.
X-Goog-Authenticated-User-Email
: Alamat email pengguna mengidentifikasinya. Jangan menyimpan informasi pribadi jika aplikasi Anda dapat menghindarinya. Aplikasi ini tidak menyimpan data apa pun; aplikasi ini hanya akan mengulanginya kembali kepada pengguna.X-Goog-Authenticated-User-Id
: ID pengguna ini yang ditetapkan oleh Google tidak menampilkan informasi tentang pengguna, tetapi memungkinkan aplikasi mengetahui bahwa pengguna yang login adalah pengguna yang sama dengan yang sebelumnya dilihat.X-Goog-Iap-Jwt-Assertion
: Anda dapat mengonfigurasi aplikasi Google Cloud untuk menerima permintaan web dari aplikasi cloud lain, dengan mengabaikan IAP, selain permintaan web internet. Jika aplikasi dikonfigurasi sedemikian rupa, permintaan tersebut dapat memiliki header palsu. Daripada menggunakan salah satu header teks biasa yang disebutkan sebelumnya, Anda dapat menggunakan dan memverifikasi header yang ditandatangani secara kriptografis ini untuk memeriksa apakah informasi disediakan oleh Google. Alamat email pengguna dan ID pengguna persisten tersedia sebagai bagian dari header yang ditandatangani ini.
Jika Anda yakin bahwa aplikasi dikonfigurasi sehingga hanya permintaan web internet yang dapat menjangkaunya, dan tidak ada yang dapat menonaktifkan layanan IAP untuk aplikasi, mengambil ID pengguna unik hanya memerlukan satu baris kode:
userID := r.Header.Get("X-Goog-Authenticated-User-ID")
Namun, aplikasi yang tangguh harus mengantisipasi terjadinya masalah, termasuk konfigurasi atau masalah lingkungan yang tidak terduga, jadi sebaiknya buat fungsi yang menggunakan dan memverifikasi header yang ditandatangani secara kriptografis. Tanda tangan header tersebut tidak dapat dipalsukan, dan jika diverifikasi, dapat digunakan untuk menampilkan identifikasi.
Memahami kode
Bagian ini menjelaskan cara kerja kode. Jika ingin menjalankan aplikasi, Anda dapat melewati ke bagian Men-deploy aplikasi.
File
go.mod
menentukan modul Go dan modul yang menjadi dependensinya.File
app.yaml
memberi tahu App Engine lingkungan bahasa yang diperlukan kode Anda.Aplikasi dimulai dengan mengimpor paket dan menentukan fungsi
main
. Fungsimain
mendaftarkan pengendali indeks dan memulai server HTTP.Fungsi
index
mendapatkan nilai header pernyataan JWT yang ditambahkan IAP dari permintaan yang masuk dan memanggil fungsivalidateAssertion
untuk memvalidasi nilai yang ditandatangani secara kriptografis. Alamat email kemudian digunakan dalam respons web minimal.Fungsi
validateAssertion
memvalidasi bahwa pernyataan ditandatangani dengan benar dan menampilkan alamat email dan ID pengguna terkait.Untuk memvalidasi pernyataan JWT, Anda harus mengetahui sertifikat kunci publik entitas yang menandatangani pernyataan (Google dalam hal ini), dan audiens yang dituju pernyataan tersebut. Untuk aplikasi App Engine, audiens adalah string dengan informasi identifikasi project Google Cloud di dalamnya. Fungsi
validateAssertion
mendapatkan sertifikat tersebut dari fungsicerts
dan string audiens dari fungsiaudience
.Anda dapat mencari ID numerik dan nama project Google Cloud, lalu memasukkannya ke dalam kode sumber sendiri, tetapi fungsi
audience
melakukannya untuk Anda dengan mengkueri layanan metadata standar yang tersedia untuk setiap aplikasi App Engine. Karena layanan metadata bersifat eksternal terhadap kode aplikasi, hasilnya disimpan dalam variabel global yang ditampilkan tanpa harus mencari metadata dalam panggilan berikutnya.Layanan metadata App Engine (dan layanan metadata serupa untuk layanan komputasi Google Cloud lainnya) terlihat seperti situs web dan dibuat kueri oleh kueri web standar. Namun, layanan metadata sebenarnya bukan situs eksternal, tetapi fitur internal yang menampilkan informasi yang diminta tentang aplikasi yang sedang berjalan, sehingga aman untuk menggunakan
http
, bukan permintaanhttps
. Layanan metadata digunakan untuk mendapatkan ID Google Cloud saat ini yang diperlukan untuk menentukan audiens yang dituju pernyataan JWT.Verifikasi tanda tangan digital memerlukan sertifikat kunci publik penanda tangan. Google menyediakan situs web yang menampilkan semua sertifikat kunci publik yang saat ini digunakan. Hasil ini di-cache jika diperlukan lagi di instance aplikasi yang sama.
Men-deploy aplikasi
Sekarang Anda dapat men-deploy aplikasi, lalu mengaktifkan IAP untuk mewajibkan pengguna melakukan autentikasi sebelum mereka dapat mengakses aplikasi.
Di jendela terminal, buka direktori yang berisi file
app.yaml
, dan deploy aplikasi ke App Engine:gcloud app deploy
Jika diminta, pilih wilayah terdekat.
Saat ditanya apakah Anda ingin melanjutkan operasi deployment, masukkan
Y
.Dalam beberapa menit, aplikasi Anda akan ditayangkan di internet.
Melihat aplikasi:
gcloud app browse
Pada output, salin
web-site-url
, alamat web untuk aplikasi.Di jendela browser, tempel
web-site-url
untuk membuka aplikasi.Tidak ada email yang ditampilkan karena Anda belum menggunakan IAP sehingga tidak ada informasi pengguna yang dikirim ke aplikasi.
Mengaktifkan IAP
Setelah instance App Engine ada, Anda dapat melindunginya dengan IAP:
Di konsol Google Cloud, buka halaman Identity-Aware Proxy.
Karena ini pertama kalinya Anda mengaktifkan opsi autentikasi untuk project ini, Anda akan melihat pesan bahwa Anda harus mengonfigurasi layar izin OAuth sebelum dapat menggunakan IAP.
Klik Konfigurasi Layar Persetujuan.
Pada tab OAuth Consent Screen di halaman Credentials, isi kolom berikut:
Jika akun Anda berada di organisasi Google Workspace, pilih Eksternal dan klik Buat. Untuk memulai, aplikasi hanya akan tersedia untuk pengguna yang Anda izinkan secara eksplisit.
Di kolom Application name, masukkan
IAP Example
.Di kolom Email dukungan, masukkan alamat email Anda.
Di kolom Authorized domain, masukkan bagian nama host dari URL aplikasi, misalnya,
iap-example-999999.uc.r.appspot.com
. Tekan tombolEnter
setelah memasukkan nama host di kolom.Di kolom Link halaman beranda aplikasi, masukkan URL untuk aplikasi Anda, misalnya,
https://iap-example-999999.uc.r.appspot.com/
.Di kolom Baris kebijakan privasi aplikasi, gunakan URL yang sama dengan link halaman beranda untuk tujuan pengujian.
Klik Simpan. Saat diminta untuk membuat kredensial, Anda dapat menutup jendela.
Di konsol Google Cloud, buka halaman Identity-Aware Proxy.
Untuk memuat ulang halaman, klik Refresh refresh. Halaman ini menampilkan daftar resource yang dapat Anda lindungi.
Di kolom IAP, klik untuk mengaktifkan IAP untuk aplikasi.
Di browser, buka
web-site-url
lagi.Layar login untuk mengautentikasi diri Anda akan muncul, bukan halaman web. Saat login, Anda akan ditolak aksesnya karena IAP tidak memiliki daftar pengguna yang diizinkan untuk mengakses aplikasi.
Menambahkan pengguna yang diberi otorisasi ke aplikasi
Di konsol Google Cloud, buka halaman Identity-Aware Proxy.
Centang kotak untuk aplikasi App Engine, lalu klik Tambahkan Prinsipal.
Masukkan
allAuthenticatedUsers
, lalu pilih peran Cloud IAP/IAP-Secured Web App User.Klik Simpan.
Sekarang, setiap pengguna yang dapat diautentikasi oleh Google dapat mengakses aplikasi. Jika mau, Anda dapat membatasi akses lebih lanjut dengan hanya menambahkan satu atau beberapa orang atau grup sebagai akun utama:
Alamat email Gmail atau Google Workspace apa pun
Alamat email Google Grup
Nama domain Google Workspace
Mengakses aplikasi
Di browser, buka
web-site-url
.Untuk memuat ulang halaman, klik Refresh refresh.
Di layar login, login dengan kredensial Google Anda.
Halaman akan menampilkan halaman "Halo
user-email-address
" dengan alamat email Anda.Jika Anda masih melihat halaman yang sama seperti sebelumnya, mungkin ada masalah dengan browser yang tidak sepenuhnya memperbarui permintaan baru setelah Anda mengaktifkan IAP. Tutup semua jendela browser, buka kembali, lalu coba lagi.
Konsep autentikasi
Ada beberapa cara agar aplikasi dapat mengautentikasi penggunanya dan membatasi akses hanya untuk pengguna yang diotorisasi. Metode autentikasi umum, dengan tingkat upaya yang menurun untuk aplikasi, tercantum di bagian berikut.
Opsi | Kelebihan | Kekurangan |
---|---|---|
Autentikasi aplikasi |
|
|
OAuth2 |
|
|
IAP |
|
|
Autentikasi yang dikelola aplikasi
Dengan metode ini, aplikasi mengelola setiap aspek autentikasi pengguna sendiri. Aplikasi harus mengelola database kredensial penggunanya sendiri dan mengelola sesi pengguna, serta harus menyediakan fungsi untuk mengelola akun dan sandi pengguna, memeriksa kredensial pengguna, serta menerbitkan, memeriksa, dan memperbarui sesi pengguna dengan setiap login yang diautentikasi. Diagram berikut mengilustrasikan metode autentikasi yang dikelola aplikasi.
Seperti yang ditunjukkan dalam diagram, setelah pengguna login, aplikasi akan membuat dan mempertahankan informasi tentang sesi pengguna. Saat pengguna membuat permintaan ke aplikasi, permintaan harus menyertakan informasi sesi yang menjadi tanggung jawab aplikasi untuk memverifikasi.
Keuntungan utama pendekatan ini adalah bersifat mandiri dan berada di bawah kontrol aplikasi. Aplikasi bahkan tidak perlu tersedia di internet. Kerugian utamanya adalah aplikasi kini bertanggung jawab untuk menyediakan semua fungsi pengelolaan akun dan melindungi semua data kredensial sensitif.
Autentikasi eksternal dengan OAuth2
Alternatif yang baik untuk menangani semua hal dalam aplikasi adalah menggunakan layanan identitas eksternal, seperti Google, yang menangani semua informasi dan fungsi akun pengguna serta bertanggung jawab untuk mengamankan kredensial sensitif. Saat pengguna mencoba login ke aplikasi, permintaan akan dialihkan ke layanan identitas, yang mengautentikasi pengguna, lalu mengalihkan permintaan kembali ke aplikasi dengan informasi autentikasi yang diperlukan. Untuk informasi selengkapnya, lihat Menggunakan OAuth 2.0 untuk Aplikasi Server Web.
Diagram berikut mengilustrasikan autentikasi eksternal dengan metode OAuth2.
Alur dalam diagram dimulai saat pengguna mengirim permintaan untuk mengakses aplikasi. Alih-alih merespons secara langsung, aplikasi mengalihkan browser pengguna ke platform identitas Google, yang menampilkan halaman untuk login ke Google. Setelah berhasil login, browser pengguna akan diarahkan kembali ke aplikasi. Permintaan ini mencakup informasi yang dapat digunakan aplikasi untuk mencari informasi tentang pengguna yang kini diautentikasi, dan aplikasi kini merespons pengguna.
Metode ini memiliki banyak keunggulan untuk aplikasi. Metode ini mendelegasikan semua risiko dan fungsi pengelolaan akun ke layanan eksternal, yang dapat meningkatkan keamanan login dan akun tanpa harus mengubah aplikasi. Namun, seperti yang ditunjukkan pada diagram sebelumnya, aplikasi harus memiliki akses ke internet untuk menggunakan metode ini. Aplikasi juga bertanggung jawab untuk mengelola sesi setelah pengguna diautentikasi.
Identity-Aware Proxy
Pendekatan ketiga, yang dibahas dalam tutorial ini, adalah menggunakan IAP untuk menangani semua autentikasi dan pengelolaan sesi dengan perubahan apa pun pada aplikasi. IAP mencegat semua permintaan web ke aplikasi Anda, memblokir permintaan yang belum diautentikasi, dan meneruskan permintaan lainnya dengan data identitas pengguna yang ditambahkan ke setiap permintaan.
Penanganan permintaan ditampilkan dalam diagram berikut.
Permintaan dari pengguna dicegat oleh IAP, yang memblokir permintaan yang tidak diautentikasi. Permintaan yang diautentikasi diteruskan ke aplikasi, asalkan pengguna yang diautentikasi ada dalam daftar pengguna yang diizinkan. Permintaan yang diteruskan melalui IAP memiliki header yang ditambahkan ke permintaan tersebut yang mengidentifikasi pengguna yang membuat permintaan.
Aplikasi tidak perlu lagi menangani akun pengguna atau informasi sesi. Setiap operasi yang perlu mengetahui ID unik untuk pengguna dapat mendapatkannya langsung dari setiap permintaan web yang masuk. Namun, ini hanya dapat digunakan untuk layanan komputasi yang mendukung IAP, seperti App Engine dan load balancer. Anda tidak dapat menggunakan IAP di komputer pengembangan lokal.
Pembersihan
Agar akun Google Cloud Anda tidak ditagih atas resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus masing-masing resource.
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.