Eksepsi dalam MSAL Java

Saat memproses pengecualian, Anda dapat menggunakan jenis pengecualian itu sendiri dan anggota ErrorCode untuk membedakan antara pengecualian. Ada tiga jenis pengecualian: MsalClientException, , MsalServiceExceptiondan MsalInteractionRequiredException, yang semuanya mewarisi dari MsalException.

  • MsalClientException dilemparkan ketika terjadi kesalahan yang bersifat lokal ke pustaka atau perangkat.
  • MsalServiceException dilemparkan ketika layanan STS mengembalikan respons kesalahan atau kesalahan jaringan lain terjadi.
  • MsalInteractionRequiredException dilemparkan ketika interaksi UI diperlukan agar autentikasi berhasil.

MsalServiceException

MsalServiceException menyediakan header HTTP yang dikembalikan untuk permintaan ke STS. Anda dapat mengaksesnya dengan MsalServiceException.headers()

MsalInteractionRequiredException

Salah satu kode status umum yang dikembalikan dari MSAL4J saat memanggil AcquireTokenSilently() adalah InvalidGrantError. Kode status ini berarti bahwa aplikasi harus memanggil pustaka autentikasi lagi, tetapi dalam mode interaktif (Menggunakan AuthorizationCodeParameters atau DeviceCodeParameters untuk aplikasi klien publik). Ini karena interaksi pengguna tambahan diperlukan sebelum token autentikasi dapat dikeluarkan.

Sebagian besar waktu ketika AcquireTokenSilently gagal, itu karena cache token tidak memiliki token yang cocok dengan permintaan Anda. Token akses kedaluwarsa dalam 1 jam, dan AcquireTokenSilently akan mencoba mengambil yang baru berdasarkan token refresh (dalam istilah OAuth2, ini adalah alur "Refresh Token'). Alur ini juga dapat gagal karena berbagai alasan, misalnya jika admin penyewa mengonfigurasi kebijakan masuk yang lebih ketat.

Interaksi bertujuan meminta pengguna melakukan tindakan. Beberapa kondisi tersebut mudah diselesaikan pengguna (misalnya, menerima Ketentuan Penggunaan dengan satu klik), dan beberapa tidak dapat diselesaikan dengan konfigurasi saat ini (misalnya, mesin yang dimaksud perlu terhubung ke jaringan perusahaan tertentu).

MSAL mengekspos reason bidang, yang dapat Anda baca untuk memberikan pengalaman pengguna yang lebih baik, misalnya untuk memberi tahu pengguna bahwa kata sandi mereka kedaluwarsa atau bahwa mereka harus memberikan persetujuan untuk menggunakan beberapa sumber daya. Nilai yang didukung adalah bagian dari enum InteractionRequiredExceptionReason:

Reason Meaning Penanganan yang Direkomendasikan
BasicAction Kondisi dapat diselesaikan dengan interaksi pengguna selama alur autentikasi interaktif Memanggil acquireToken dengan parameter interaktif
Tindakan Tambahan Kondisi dapat diselesaikan dengan interaksi remedial tambahan dengan sistem, di luar alur autentikasi interaktif. Panggil acquireToken dengan parameter interaktif untuk menampilkan pesan yang menjelaskan tindakan perbaikan. Aplikasi panggilan dapat memilih untuk menyembunyikan alur yang memerlukan additional_action jika pengguna tidak mungkin menyelesaikan tindakan perbaikan.
MessageOnly Kondisi tidak dapat diselesaikan saat ini. Meluncurkan alur autentikasi interaktif akan menampilkan pesan yang menjelaskan kondisi. Panggil acquireToken dengan parameter interaktif untuk menampilkan pesan yang menjelaskan kondisi. acquireTokenCall akan mengembalikan kesalahan UserCanceled setelah pengguna membaca pesan dan menutup jendela. Aplikasi pemanggil dapat memilih untuk menyembunyikan alur yang menghasilkan message_only jika pengguna kemungkinan tidak akan memperoleh manfaat dari pesan tersebut.
Persetujuan Diperlukan Persetujuan pengguna hilang, atau telah dicabut. Panggil semua acquireToken dengan parameter interaktif bagi pengguna untuk memberikan persetujuan.
Kata sandi pengguna telah kedaluwarsa Kata sandi pengguna telah kedaluwarsa. Panggil acquireToken dengan parameter interaktif sehingga pengguna dapat mengatur ulang kata sandi
Persetujuan Diperlukan Persetujuan pengguna hilang, atau telah dicabut Memanggil acquireToken dengan parameter interaktif sehingga pengguna dapat mengatur ulang kata sandi
Tidak Tidak ada detail lebih lanjut yang disediakan. Kondisi dapat diatasi oleh interaksi pengguna selama alur autentikasi interaktif. Memanggil acquireToken dengan parameter interaktif

Contoh Kode

IAuthenticationResult result;
try {
    PublicClientApplication application = PublicClientApplication
            .builder("clientId")
            .b2cAuthority("authority")
            .build();

    SilentParameters parameters = SilentParameters
            .builder(Collections.singleton("scope"))
            .build();

    result = application.acquireTokenSilently(parameters).join();
}
catch (Exception ex){
    if(ex instanceof MsalInteractionRequiredException){
        // AcquireToken by either AuthorizationCodeParameters or DeviceCodeParameters
    } else{
        // Log and handle exception accordingly
    }
}