Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
MSAL Angular menyediakan MsalGuard, kelas yang dapat Anda gunakan untuk melindungi rute dan memerlukan autentikasi sebelum mengakses rute yang dilindungi. Dokumen ini menyediakan informasi selengkapnya tentang mengonfigurasi dan pertimbangan saat menggunakan MsalGuard.
MsalGuard adalah kelas kenyamanan yang dapat Anda gunakan untuk meningkatkan pengalaman pengguna, tetapi tidak boleh diandalkan untuk keamanan. Penyerang berpotensi melewati perlindungan di sisi klien, dan Anda harus memastikan bahwa server tidak mengembalikan data apa pun yang seharusnya tidak dapat diakses oleh pengguna.
Anda mungkin juga memerlukan penjaga rute yang memenuhi kebutuhan tertentu. Kami mendorong Anda untuk membuat guard Anda sendiri jika MsalGuard tidak memenuhi semua kebutuhan tersebut.
Konfigurasi
Mengonfigurasi MsalGuard di app.module.ts dan app-routing.module.ts
MsalGuard dapat ditambahkan ke aplikasi Anda sebagai penyedia di app.module.ts, dengan konfigurasinya. Import tersebut menerima sebuah instans MSAL, serta dua objek konfigurasi khusus Angular. Argumen kedua adalah MsalGuardConfiguration objek, yang berisi nilai untuk interactionType, opsional authRequest, dan opsional loginFailedRoute.
kemudian MsalGuard digunakan untuk melindungi rute di app-routing.module.ts. Sampel kode di bawah ini menunjukkan penambahan MsalGuard ke Profile rute. Melindungi Profile rute berarti bahwa meskipun pengguna tidak masuk menggunakan Login tombol , jika mereka mencoba mengakses Profile rute atau mengklik Profile tombol , MsalGuard akan meminta pengguna untuk mengautentikasi melalui popup atau pengalihan sebelum menampilkan Profile halaman.
Konfigurasi Anda mungkin terlihat seperti di bawah ini. Lihat dokumentasi konfigurasi kami untuk mengetahui cara lain mengonfigurasi MSAL Angular untuk aplikasi Anda, serta bagian di bawah ini untuk detail lebih lanjut tentang objek MsalConfiguration dan antarmuka untuk perutean.
// app.module.ts
import { NgModule } from '@angular/core';
import { HTTP_INTERCEPTORS, HttpClientModule } from "@angular/common/http";
import { MsalModule, MsalRedirectComponent, MsalGuard } from '@azure/msal-angular'; // Import MsalInterceptor
import { InteractionType, PublicClientApplication } from '@azure/msal-browser';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
@NgModule({
declarations: [
AppComponent,
],
imports: [
MsalModule.forRoot( new PublicClientApplication({
// MSAL Configuration
}), {
// MSAL Guard Configuration
interactionType: InteractionType.Redirect,
authRequest: {
scopes: ['user.read']
},
loginFailedRoute: '/login-failed'
}, {
// MSAL Interceptor Configurations
}),
AppRoutingModule
],
providers: [
// ...
MsalGuard
],
bootstrap: [AppComponent, MsalRedirectComponent]
})
export class AppModule { }
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { ProfileComponent } from './profile/profile.component';
import { MsalGuard } from '@azure/msal-angular';
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
path: '',
component: HomeComponent
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Jenis Interaksi
Mengatur jenis interaksi menentukan bagaimana MsalGuard akan secara interaktif meminta masuk.
InteractionType dapat diimpor dari @azure/msal-browser dan diatur ke Popup atau Redirect.
AuthRequest opsional
Opsional authRequest adalah fitur lanjutan yang tidak diperlukan. Namun, kami menyarankan agar menyetel authRequest pada MsalGuardConfiguration dengan scopes sehingga persetujuan dapat diperoleh untuk cakupan akses sejak awal. Jika persetujuan untuk scopes belum diberikan sejak awal, cakupan akses dapat diperoleh secara bertahap. Ini dapat mengakibatkan dialog persetujuan disajikan kepada pengguna aplikasi Anda beberapa kali.
Memberikan persetujuan untuk cakupan akses sejak awal didemonstrasikan dalam contoh kode di atas, dan dalam sampel kami.
Semua parameter yang mungkin untuk objek permintaan dapat ditemukan di sini: PopupRequest dan RedirectRequest.
Rute Gagal Masuk
String loginFailedRoute dapat diatur pada MsalGuardConfiguration.
MsalGuard akan mengalihkan ke rute ini jika login diperlukan dan gagal.
Lihat sampel Angular untuk contoh penerapannya dalam konfigurasi dan modul perutean aplikasi.
Perhatikan bahwa pengalihan saat terjadi kegagalan tidak tersedia untuk aplikasi Angular 9 yang menggunakan antarmuka CanLoad karena perbedaan tipe dasar.
Interfaces
Selain canActivate, MsalGuard juga mengimplementasikan canActivateChild dan canLoad, dan ini dapat ditambahkan ke definisi rute Anda dalam app-routing.module.ts. Anda dapat melihat penggunaannya pada aplikasi sampel MSAL Angular v2 Angular 11 versi lama kami, serta di bawah ini. Untuk informasi selengkapnya tentang antarmuka, lihat dokumen Angular.
const routes: Routes = [
{
path: 'profile',
canActivateChild: [MsalGuard],
children: [
{
path: '',
component: ProfileComponent
},
{
path: 'detail',
component: DetailComponent
}
]
},
{
path: 'lazyLoad',
loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule),
canLoad: [MsalGuard]
},
];
Pertimbangan saat menggunakan MSAL Guard
Menggunakan MSAL Guard di beranda
Menetapkan MsalGuard di halaman awal adalah rekomendasi kami jika Anda ingin pengguna diminta untuk masuk saat mereka mengakses aplikasi Anda. Kami tidak menyarankan untuk memanggil login di ngOnInit dalam app.component.ts, karena hal ini dapat menyebabkan perulangan saat pengalihan.
Rekomendasi tambahan kami tergantung pada strategi perutean Anda dan dapat Anda temukan pada bagian berikut.
Menggunakan MSAL Guard dengan perutean jalur
Saat menggunakan PathLocationStrategy dan mengalihkan dengan aplikasi Angular Anda, sebaiknya gunakan rute khusus untuk pengalihan, yang akan membantu mencegah perulangan. Rute ini juga harus menjadi redirectUri Anda, dan tidak boleh dilindungi oleh MsalGuard.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Dedicated route for redirects
path: 'auth',
component: MsalRedirectComponent
},
{
path: '',
component: HomeComponent
}
];
Agar pengguna masuk saat membuka aplikasi Anda, saat menggunakan PathLocationStrategy, kami sarankan:
- Mengatur
MsalGuarddi halaman awal Anda - Atur
redirectUriAnda ke'http://localhost:4200/auth' - Menambahkan path
'auth'ke rute Anda, menetapkanMsalRedirectComponentsebagai komponen (rute ini tidak boleh dilindungi olehMsalGuard) - Memastikan
MsalRedirectComponentdi-bootstrap - Secara opsional: menambahkan
MsalGuardke semua rute jika Anda ingin semua rute Anda dilindungi
Sampel Modul Angular kami menggunakan PathLocationStrategy dan menunjukkan cara melindungi rute dengan MsalGuard.
Menggunakan MSAL Guard dengan perutean hash
Saat menggunakan HashLocationStrategy dengan aplikasi Angular Anda, kami sangat menyarankan agar Anda menetapkan rute placeholder (seperti /code) di app-routing.module.ts untuk mencegah router Angular terpicu saat Microsoft Entra ID mengembalikan respons kode autentikasi di hash URL, karena tanpa melakukannya, Anda mungkin mengalami masalah saat menyelesaikan proses autentikasi. Rute tempat penampung ini tidak boleh dilindungi oleh MsalGuard, dan tidak boleh menunjuk ke komponen yang memicu interaksi atau melakukan panggilan API yang dilindungi pada pemuatan halaman.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Needed for hash routing
path: 'code',
component: HomeComponent
},
{
path: '',
component: HomeComponent
}
];
redirectUri di Konfigurasi MSAL juga harus disetel ke halaman beranda.
Untuk membuat pengguna masuk saat membuka aplikasi Anda, ketika menggunakan HashLocationStrategy, kami merekomendasikan:
- Mengatur
MsalGuarddi halaman awal Anda - Tidak menetapkan
MsalGuarduntuk rute placeholder (misalnya/code,/error) - Memastikan
MsalRedirectComponentdi-bootstrap - Secara opsional: menambahkan
MsalGuardke semua rute lainnya jika Anda ingin semua rute Anda dilindungi
Lihat sampel MSAL Angular v2 Angular 11 kami yang lebih lama, yang menggunakan HashLocationStrategy dan menunjukkan cara melindungi rute dengan MsalGuard.
Perubahan dari msal-angular v1 ke v2
-
Konfigurasi:
MsalAngularConfigurationtelah tidak digunakan lagi dan tidak lagi berfungsi. MengonfigurasiMsalGuardsekarang dilakukan melaluiMsalGuardConfiguration. -
Antarmuka:
MsalGuardsekarang mengimplementasikanCanActivateChilddanCanLoadselainCanActivate. Lihat bagian di atas tentangInterfacesuntuk detail selengkapnya. -
Pengalihan saat gagal: konfigurasi
MsalGuardkini memilikiloginFailedRouteyang dapat dikonfigurasi. Lihat bagian di atas padaloginFailedRouteuntuk detailnya.