Saya mencoba menerapkan otorisasi yang didelegasikan di API Web untuk aplikasi seluler menggunakan OAuth 2.0. Menurut spesifikasi, aliran pemberian implisit tidak mendukung token penyegaran, yang berarti setelah token akses diberikan untuk jangka waktu tertentu, pengguna harus memberikan izin ke aplikasi lagi setelah token kedaluwarsa atau dicabut.
Saya rasa ini adalah skenario yang bagus untuk beberapa kode javascript yang berjalan di browser seperti yang disebutkan dalam spesifikasi. Saya mencoba meminimalkan waktu pengguna harus memberikan izin ke aplikasi untuk mendapatkan token, jadi sepertinya alur Kode Otorisasi adalah opsi yang baik karena mendukung token penyegaran.
Namun, aliran ini tampaknya sangat bergantung pada browser web untuk melakukan pengalihan. Saya bertanya-tanya apakah aliran ini masih merupakan opsi yang baik untuk aplikasi seluler jika browser web tertanam digunakan. Atau haruskah saya mengikuti aliran implisit?
Jawaban:
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
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/
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
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
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
Untuk memperjelas lebih lanjut, berikut adalah kutipan dari bagian draf sebelumnya dari tautan praktik terbaik yang disediakan di atas
Beberapa poin menarik juga diangkat di sini: /security/179756/why-are-developers-using-embedded-user-agents-for-3rd-party-auth-what-are-the- Sebuah
sumber
Sayangnya, menurut saya tidak ada jawaban yang jelas untuk pertanyaan ini. Namun, berikut adalah opsi yang telah saya identifikasi:
Jika boleh meminta kredensial pengguna, maka gunakan Kredensial Sandi Pemilik Sumber Daya . Namun, ini mungkin tidak dapat dilakukan karena beberapa alasan, yaitu
Jika penggunaan aliran berbasis browser diperlukan, gunakan Alur Kode Otorisasi . Di sini, definisi
redirect_uri
adalah tantangan utama, yang memiliki pilihan berikut:redirect_uri
(misalnyaurn:ietf:wg:oauth:2.0:oob
) memberi sinyal pada titik akhir otorisasi untuk menampilkan kode otorisasi alih-alih mengalihkan kembali ke aplikasi klien. Pengguna dapat menyalin kode ini secara manual atau aplikasi dapat mencoba mendapatkannya dari judul dokumen HTML.localhost
server di perangkat (manajemen port mungkin tidak mudah).myapp://...
) yang ketika dereferensi memicu "penangan" terdaftar (detailnya bergantung pada platform seluler).Semoga ini membantu
Pedro
sumber
TL; DR: Gunakan Hibah Kode Otorisasi dengan PKCE
1. Jenis Hibah Tersirat
Jenis hibah implisit cukup populer dengan aplikasi seluler. Tapi itu tidak dimaksudkan untuk digunakan seperti ini. Ada masalah keamanan seputar pengalihan. Justin Richer menyatakan :
Dan bersama dengan fakta, itu tidak memungkinkan Anda menyegarkan token akses, lebih baik hindari.
2. Jenis Pemberian Kode Otorisasi
Pemberian kode otorisasi membutuhkan rahasia klien. Tetapi Anda tidak boleh menyimpan informasi sensitif dalam kode sumber aplikasi seluler Anda. Orang bisa mengekstraknya. Untuk tidak mengungkap rahasia klien, Anda harus menjalankan server sebagai perantara seperti yang ditulis Facebook :
Bukan solusi yang ideal, tetapi ada cara baru yang lebih baik untuk melakukan OAuth di perangkat seluler: Kunci Bukti untuk Pertukaran Kode
3. Jenis Pemberian Kode Otorisasi dengan PKCE (Kunci Bukti untuk Pertukaran Kode)
Di luar batasan, teknik baru telah dibuat yang memungkinkan Anda menggunakan Kode Otorisasi tanpa rahasia klien. Anda dapat membaca RFC 7636 lengkap atau pengantar singkat ini .
dari https://oauth.net/2/pkce/
sumber
Menggunakan tampilan web di aplikasi seluler Anda harus menjadi cara yang terjangkau untuk menerapkan protokol OAuth2.0 di platform Android.
Adapun bidang redirect_uri, menurut saya
http://localhost
adalah pilihan yang baik dan Anda tidak perlu mem-port server HTTP di dalam aplikasi Anda, karena Anda dapat menimpa implementasionPageStarted
fungsi diWebViewClient
kelas dan berhenti memuat halaman webhttp://localhost
setelah Anda memeriksaurl
parameter.sumber
Pengalaman pengguna paling lancar untuk autentikasi, dan yang paling mudah diterapkan adalah dengan menyematkan tampilan web di aplikasi Anda. Memproses tanggapan yang diterima oleh tampilan web dari titik otentikasi dan mendeteksi kesalahan (pembatalan pengguna) atau persetujuan (dan ekstrak token dari parameter kueri url). Dan saya pikir Anda bisa melakukannya di semua platform. Saya telah berhasil membuat ini berfungsi untuk yang berikut: aplikasi ios, android, mac, windows store 8.1, aplikasi windows phone 8.1. Saya melakukan ini untuk layanan berikut: dropbox, google drive, onedrive, box, basecamp. Untuk platform non-windows, saya menggunakan Xamarin yang seharusnya tidak mengekspos seluruh API spesifik platform, namun itu cukup mengekspos untuk memungkinkan hal ini. Jadi ini adalah solusi yang cukup mudah diakses, bahkan dari perspektif lintas platform, dan Anda tidak
sumber