Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O MSAL Angular fornece MsalGuard, uma classe que pode usar para proteger rotas e requer autenticação antes de aceder à rota protegida. Este documento fornece mais informações sobre a configuração e as considerações a ter em conta ao utilizar o MsalGuard.
MsalGuard é uma classe de conveniência que podes usar para melhorar a experiência do utilizador, mas não deve ser usada para segurança. Os atacantes podem potencialmente contornar os guardas do lado do cliente, e deve garantir que o servidor não devolve quaisquer dados que o utilizador não deva aceder.
Também pode precisar de uma guarda de rota que satisfaça necessidades específicas. Incentivamo-lo a criar a sua própria proteção se MsalGuard não responder a todas essas necessidades.
Configurações
Configurar o MsalGuard no app.module.ts e no app-routing.module.ts
O MsalGuard pode ser adicionado à sua aplicação como provedor no ficheiro app.module.ts, juntamente com a respetiva configuração. A importação inclui uma instância de MSAL, bem como dois objetos de configuração específicos do Angular. O segundo argumento é um MsalGuardConfiguration objeto, que contém os valores para interactionType, um opcional authRequest, e um opcional loginFailedRoute.
Depois, MsalGuard é usado para proteger as rotas no app-routing.module.ts. O exemplo de código abaixo demonstra como adicionar o MsalGuard à rota Profile. Proteger a rota Profile significa que, mesmo que o utilizador não inicie sessão através do botão Login, se tentar aceder à rota Profile ou clicar no botão Profile, o MsalGuard solicitará ao utilizador que se autentique através de uma janela de pop-up ou de redirecionamento antes de apresentar a página Profile.
A sua configuração pode parecer a que está abaixo. Consulte o nosso documento de configuração sobre outras formas de configurar o MSAL Angular para a sua aplicação, e as secções abaixo para mais detalhes sobre o MsalConfiguration objeto e interfaces para o encaminhamento.
// 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 { }
Tipo de Interação
Definir o tipo de interação determina como o MsalGuard solicitará interativamente o início de sessão. Podem InteractionType ser importados de @azure/msal-browser e definidos para Popup ou Redirect.
AuthRequest opcional
O opcional authRequest é uma funcionalidade avançada que não é obrigatória. No entanto, recomendamos definir authRequest no MsalGuardConfiguration com scopes para que o consentimento possa ser obtido antecipadamente para os âmbitos. Se o consentimento para scopes não for concedido inicialmente, os escopos podem ser obtidos de forma incremental. Isto pode resultar na apresentação de um diálogo de consentimento ao utilizador da aplicação várias vezes.
A concessão prévia de consentimento para os scopes é demonstrada nos exemplos de código acima e nas nossas amostras.
Todos os parâmetros possíveis para o objeto de pedido podem ser encontrados aqui: PopupRequest e RedirectRequest.
Falha na rota de início de sessão
A loginFailedRoute cadeia pode ser definida em MsalGuardConfiguration. O MsalGuard redirecionará para esta rota se a autenticação for necessária e falhar.
Consulte o exemplo do Angular para exemplos de implementação no módulo de configuração e encaminhamento de aplicações.
Note que o redirecionamento em caso de falha não está disponível para aplicações Angular 9 que utilizam a CanLoad interface devido a diferenças no tipo base.
Interfaces
Além de canActivate, MsalGuard também implementa canActivateChild e canLoad, e estes podem ser adicionados às definições de rotas em app-routing.module.ts. Pode ver estes usados na nossa aplicação de exemplo mais antiga MSAL Angular v2 Angular 11, assim como abaixo. Para mais informações sobre interfaces, consulte a documentação do 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]
},
];
Considerações ao utilizar a MSAL Guard
Utilização do MSAL Guard na página inicial
Definir o MsalGuard na página inicial é a nossa recomendação, caso queira que os utilizadores sejam convidados a iniciar sessão quando acedirem à sua aplicação. Não recomendamos chamar login no ngOnInit em app.component.ts, pois isso pode causar ciclos de redirecionamento.
As nossas recomendações adicionais dependem da sua estratégia de encaminhamento e podem ser encontradas nas secções abaixo.
Utilização do MSAL Guard com roteamento de caminho
Ao utilizar o PathLocationStrategy e redirecionamentos na sua aplicação Angular, recomendamos a utilização de uma rota dedicada para redirecionamentos, o que ajudará a evitar ciclos. Esta rota também deve ser a sua redirectUri, e não deve ser protegida pelo MsalGuard.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Dedicated route for redirects
path: 'auth',
component: MsalRedirectComponent
},
{
path: '',
component: HomeComponent
}
];
Para iniciar sessão dos utilizadores ao chegarem à sua aplicação, ao utilizar PathLocationStrategy, recomendamos:
- Definir o
MsalGuardna sua página inicial - Defina o seu
redirectUripara'http://localhost:4200/auth' - Adicionar um
'auth'caminho às suas rotas, definir oMsalRedirectComponentcomo o componente (esta rota não deve ser protegida peloMsalGuard) - Garantir que o
MsalRedirectComponenté inicializado - Opcionalmente: adicionar
MsalGuarda todas as tuas rotas se quiseres proteger todas as tuas rotas
O nosso exemplo de módulos Angular utiliza o PathLocationStrategy e demonstra como proteger rotas com o MsalGuard.
Utilização de MSAL Guard com roteamento com hash
Ao usar o router HashLocationStrategy com a sua aplicação Angular, recomendamos vivamente que defina rotas de marcador (como /code) no ficheiro app-routing.module.ts para evitar que o router do Angular seja acionado quando o Microsoft Entra ID devolver a resposta do código de autenticação no hash, caso contrário, poderá ter problemas em concluir a autenticação. Estas rotas provisórias não devem ser protegidas pelo MsalGuard, nem devem apontar para um componente que desencadeie uma interação ou faça chamadas protegidas à API ao carregar a página.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Needed for hash routing
path: 'code',
component: HomeComponent
},
{
path: '',
component: HomeComponent
}
];
A redirectUri na Configuração do MSAL também deve ser definida para a página inicial.
Para iniciar sessão dos utilizadores ao chegarem à sua aplicação, ao utilizar HashLocationStrategy, recomendamos:
- Definir o
MsalGuardna sua página inicial - Não definir o
MsalGuardem rotas de marcador de posição (por exemplo,/code,/error) - Garantir que o
MsalRedirectComponenté inicializado - Opcionalmente: adicionar
MsalGuarda todas as outras rotas se quiseres proteger todas as tuas rotas
Veja o nosso exemplo anterior do MSAL Angular v2 para Angular 11, que utiliza o HashLocationStrategy e demonstra como proteger rotas com MsalGuard.
Alterações da versão 1 para a versão 2 do msal-angular
-
Configuração:
MsalAngularConfigurationfoi descontinuada e já não funciona. A configuração doMsalGuardé agora feita através doMsalGuardConfiguration. -
Interfaces:
MsalGuardagora implementaCanActivateChildeCanLoadalém deCanActivate. Consulte a secção acima sobreInterfacespara mais detalhes. -
Redirecionamento em caso de falha:
MsalGuarda configuração dispõe agora de umloginFailedRouteconfigurável. Consulte a secção acima sobre ologinFailedRoutepara mais detalhes.