Klarifikasi: Aplikasi Seluler = Aplikasi Asli
Seperti yang dinyatakan dalam komentar lain dan beberapa sumber online, implisit tampaknya cocok secara alami untuk aplikasi seluler, namun solusi terbaik tidak selalu jelas (dan sebenarnya implisit tidak disarankan karena alasan yang dibahas di bawah).
Praktik Terbaik OAuth2 Aplikasi Asli
Apa pun pendekatan yang Anda pilih (ada beberapa kompromi untuk dipertimbangkan), Anda harus memperhatikan praktik terbaik seperti yang diuraikan di sini untuk Native Apps menggunakan OAuth2: https://tools.ietf.org/html/rfc8252
Pertimbangkan opsi berikut
Implisit
Haruskah saya menggunakan implisit?
Mengutip dari Bagian 8.2 https://tools.ietf.org/html/rfc8252#section-8.2
Alur otorisasi pemberian implisit OAuth 2.0 (dijelaskan di Bagian 4.2 dari OAuth 2.0 [RFC6749]) umumnya berfungsi dengan praktik menjalankan permintaan otorisasi di browser dan menerima respons otorisasi melalui komunikasi antar-aplikasi berbasis URI.
Namun, karena aliran implisit tidak dapat dilindungi oleh PKCE [RFC7636] (yang diwajibkan dalam Bagian 8.1), penggunaan Alur Implisit dengan aplikasi asli TIDAK DIANJURKAN .
Token akses yang diberikan melalui aliran implisit juga tidak dapat dimuat ulang tanpa interaksi pengguna, membuat aliran pemberian kode otorisasi - yang dapat mengeluarkan token penyegaran - opsi yang lebih praktis untuk otorisasi aplikasi asli yang memerlukan penyegaran token akses.
Kode Otorisasi
Jika Anda menggunakan Kode Otorisasi, salah satu pendekatannya adalah melakukan proxy melalui komponen server web Anda sendiri yang memperkaya permintaan token dengan rahasia klien untuk menghindari menyimpannya di aplikasi terdistribusi pada perangkat.
Kutipan di bawah ini dari: https://dev.fitbit.com/docs/oauth2/
Alur Hibah Kode Otorisasi direkomendasikan untuk aplikasi yang memiliki layanan web. Alur ini membutuhkan komunikasi server-ke-server menggunakan rahasia klien aplikasi.
Catatan: Jangan pernah meletakkan rahasia klien Anda dalam kode terdistribusi, seperti aplikasi yang diunduh melalui toko aplikasi atau JavaScript sisi klien.
Aplikasi yang tidak memiliki layanan web harus menggunakan aliran Hibah Implisit.
Kesimpulan
Keputusan akhir harus mempertimbangkan pengalaman pengguna yang Anda inginkan, tetapi juga selera Anda terhadap risiko setelah melakukan penilaian risiko yang tepat dari pendekatan yang Anda pilih dan pemahaman yang lebih baik tentang implikasinya.
Bacaan yang bagus ada di sini https://auth0.com/blog/oauth-2-best-practices-for-native-apps/
Yang lainnya adalah https://www.oauth.com/oauth2-servers/oauth-native-apps/ yang menyatakan
Praktik terbaik industri saat ini adalah menggunakan Alur Otorisasi sambil menghilangkan rahasia klien, dan menggunakan agen pengguna eksternal untuk menyelesaikan alur. Agen pengguna eksternal biasanya adalah browser asli perangkat, (dengan domain keamanan terpisah dari aplikasi asli,) sehingga aplikasi tidak dapat mengakses penyimpanan cookie atau memeriksa atau mengubah konten halaman di dalam browser.
Pertimbangan PKCE
Anda juga harus mempertimbangkan PKCE yang dijelaskan di sini https://www.oauth.com/oauth2-servers/pkce/
Secara khusus, jika Anda juga menerapkan Server Otorisasi, maka https://www.oauth.com/oauth2-servers/oauth-native-apps/checklist-server-support-native-apps/ menyatakan bahwa Anda harus
- Izinkan klien untuk mendaftarkan skema URL khusus untuk URL pengalihan mereka.
- Mendukung URL pengalihan IP loopback dengan nomor port arbitrer untuk mendukung aplikasi desktop.
- Jangan menganggap aplikasi asli dapat menyimpan rahasia. Mewajibkan semua aplikasi untuk menyatakan apakah itu publik atau rahasia, dan hanya menerbitkan rahasia klien ke aplikasi rahasia.
- Mendukung ekstensi PKCE, dan mewajibkan klien publik untuk menggunakannya.
- Mencoba mendeteksi saat antarmuka otorisasi disematkan dalam tampilan web aplikasi asli, bukan diluncurkan di browser sistem, dan menolak permintaan tersebut.
Pertimbangan Tampilan Web
Ada banyak contoh di alam bebas menggunakan Tampilan Web yaitu agen pengguna yang disematkan tetapi pendekatan ini harus dihindari (terutama jika aplikasi bukan pihak pertama) dan dalam beberapa kasus dapat mengakibatkan Anda dilarang menggunakan API sebagai kutipan di bawah ini dari sini menunjukkan
Setiap upaya untuk menyematkan halaman otentikasi OAuth 2.0 akan mengakibatkan aplikasi Anda diblokir dari API Fitbit.
Untuk pertimbangan keamanan, halaman otorisasi OAuth 2.0 harus disajikan dalam tampilan browser khusus. Pengguna Fitbit hanya dapat mengonfirmasi bahwa mereka mengautentikasi dengan situs Fitbit.com asli jika mereka memiliki alat yang disediakan oleh browser, seperti bilah URL dan informasi sertifikat Transport Layer Security (TLS).
Untuk aplikasi asli, ini berarti halaman otorisasi harus dibuka di browser default. Aplikasi asli dapat menggunakan skema URL khusus sebagai URI pengalihan untuk mengarahkan pengguna kembali dari browser ke aplikasi yang meminta izin.
Aplikasi iOS dapat menggunakan kelas SFSafariViewController alih-alih pengalihan aplikasi ke Safari. Penggunaan kelas WKWebView atau UIWebView dilarang.
Aplikasi Android dapat menggunakan Tab Khusus Chrome alih-alih pengalihan aplikasi ke browser default. Penggunaan WebView dilarang.
Untuk memperjelas lebih lanjut, berikut adalah kutipan dari bagian draf sebelumnya dari tautan praktik terbaik yang disediakan di atas
Agen pengguna tersemat, biasanya diterapkan dengan tampilan web, merupakan metode alternatif untuk memberi otorisasi aplikasi asli. Namun, menurut definisi, mereka tidak aman untuk digunakan oleh pihak ketiga. Mereka melibatkan pengguna yang masuk dengan kredensial masuk lengkap mereka, hanya untuk menurunkan mereka ke kredensial OAuth yang kurang kuat.
Bahkan saat digunakan oleh aplikasi pihak pertama tepercaya, agen pengguna yang disematkan melanggar prinsip hak istimewa paling rendah dengan mendapatkan kredensial yang lebih kuat daripada yang mereka butuhkan, yang berpotensi meningkatkan permukaan serangan.
Dalam implementasi umum berbasis tampilan web dari agen pengguna tersemat, aplikasi host dapat: mencatat setiap penekanan tombol yang dimasukkan dalam formulir untuk menangkap nama pengguna dan sandi; mengirimkan formulir secara otomatis dan mengabaikan persetujuan pengguna; salin cookie sesi dan gunakan untuk melakukan tindakan terautentikasi sebagai pengguna.
Mendorong pengguna untuk memasukkan kredensial dalam tampilan web tersemat tanpa bilah alamat biasa dan fitur identitas lain yang dimiliki browser membuat pengguna tidak mungkin mengetahui apakah mereka masuk ke situs yang sah, dan bahkan saat mereka masuk, itu melatih mereka bahwa tidak masalah memasukkan kredensial tanpa memvalidasi situs terlebih dahulu.
Selain masalah keamanan, tampilan web tidak membagikan status autentikasi dengan aplikasi lain atau browser sistem, mengharuskan pengguna untuk masuk untuk setiap permintaan otorisasi dan menyebabkan pengalaman pengguna yang buruk.
Karena hal di atas, penggunaan agen pengguna tersemat TIDAK DIANJURKAN, kecuali jika aplikasi pihak pertama tepercaya bertindak sebagai agen pengguna eksternal untuk aplikasi lain, atau menyediakan sistem masuk tunggal untuk beberapa aplikasi pihak pertama.
Server otorisasi HARUS mempertimbangkan untuk mengambil langkah-langkah untuk mendeteksi dan memblokir login melalui agen pengguna tertanam yang bukan milik mereka, jika memungkinkan.
Beberapa poin menarik juga diangkat di sini: /security/179756/why-are-developers-using-embedded-user-agents-for-3rd-party-auth-what-are-the- Sebuah