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.
Aplica-se a: Inquilinos do Workforce
Inquilinos externos (saiba mais)
Este tutorial é a primeira parte de uma série que demonstra a criação de um aplicativo de página única (SPA) Angular, adicionando autenticação e extraindo dados do usuário usando a plataforma de identidade da Microsoft.
Neste tutorial, você:
- Criar um novo projeto Angular
- Definir as configurações para o aplicativo
- Adicionar código de autenticação ao aplicativo
Pré-requisitos
- Um membro da força de trabalho. Você pode usar o seu diretório padrão ou configurar um novo inquilino.
- Registre um novo aplicativo no centro de administração do Microsoft Entra, configurado para Contas somente neste diretório organizacional. Consulte Registar uma candidatura para obter mais detalhes. Registre os seguintes valores na página Visão geral do aplicativo para uso posterior:
- ID da aplicação (cliente)
- ID do diretório (inquilino)
- Adicione os seguintes URIs de redirecionamento na configuração da plataforma de aplicação de página única. Consulte Como adicionar um URI de redirecionamento em seu aplicativo para obter mais detalhes.
-
Redirecionar URI:
http://localhost:4200/
.
-
Redirecionar URI:
- CLI Angular
- Node.js 18.19 ou mais recente.
- Visual Studio Code ou outro editor de código.
Criar um novo projeto Angular
Nesta seção, você criará um novo projeto Angular usando a CLI Angular no Visual Studio Code. Escolha a guia apropriada com base no seu tipo de locatário.
Para construir o projeto Angular a partir do zero, siga estas etapas:
Abra uma janela do terminal e execute o seguinte comando para criar um novo projeto Angular:
ng new msal-angular-tutorial --routing=true --style=css --strict=false
O comando cria um novo projeto Angular nomeado
msal-angular-tutorial
com roteamento habilitado, CSS para estilo e modo estrito desativado.Mude para o diretório do projeto:
cd msal-angular-tutorial
Instale as dependências do aplicativo:
npm install @azure/msal-browser @azure/msal-angular bootstrap
O comando
npm install @azure/msal-browser @azure/msal-angular bootstrap
instala o navegador MSAL do Azure, o Azure MSAL Angular e os pacotes Bootstrap.Abra
angular.json
e adicione à matriz o caminho CSS do Bootstrapstyles
."styles": [ "src/styles.css", "node_modules/bootstrap/dist/css/bootstrap.min.css" ],
O código adiciona o Bootstrap CSS à matriz de estilos no
angular.json
arquivo.Gerar os componentes Home e Profile
ng generate component home ng generate component profile
Os comandos geram os componentes Home e Profile no projeto Angular.
Remova arquivos e códigos desnecessários do projeto:
rm src/app/app.component.css rm src/app/app.component.spec.ts rm src/app/home/home.component.css rm src/app/home/home.component.spec.ts rm src/app/profile/profile.component.css rm src/app/profile/profile.component.spec.ts
Os comandos removem arquivos e códigos desnecessários do projeto.
Renomeie
app.routes.ts
paraapp-routing.module.ts
usando o Visual Studio Code e atualize todas as referências deapp.routes.ts
em toda a aplicação.Renomeie
app.config.ts
paraapp.module.ts
usando o Visual Studio Code e atualize todas as referências paraapp.config.ts
em todo o aplicativo.
Depois de concluir essas etapas, a estrutura do projeto deve ter a seguinte aparência:
.
├── README.md
├── angular.json
├── package-lock.json
├── package.json
├── src
│ ├── app
│ │ ├── app-routing.module.ts
│ │ ├── app.component.html
│ │ ├── app.component.ts
│ │ ├── app.module.ts
│ │ ├── home
│ │ │ ├── home.component.html
│ │ │ └── home.component.ts
│ │ └── profile
│ │ ├── profile.component.html
│ │ └── profile.component.ts
│ ├── index.html
│ ├── main.ts
│ ├── polyfills.ts
│ └── styles.css
├── tsconfig.app.json
└── tsconfig.json
Definir configurações do aplicativo
Nesta seção, você definirá as configurações do aplicativo para autenticação. Usaremos os valores registrados durante o registro do aplicativo para configurar o aplicativo para autenticação. Escolha a guia apropriada com base no seu tipo de locatário.
Usaremos os valores registrados durante o registro do aplicativo para configurar o aplicativo para autenticação. Siga estes passos:
Abra o
src/app/app.module.ts
arquivo e substitua o conteúdo pelo seguinte código:// Required for Angular multi-browser support import { BrowserModule } from '@angular/platform-browser'; // Required for Angular import { NgModule } from '@angular/core'; // Required modules and components for this application import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { ProfileComponent } from './profile/profile.component'; import { HomeComponent } from './home/home.component'; // HTTP modules required by MSAL import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; // Required for MSAL import { IPublicClientApplication, PublicClientApplication, InteractionType, BrowserCacheLocation, LogLevel } from '@azure/msal-browser'; import { MsalGuard, MsalInterceptor, MsalBroadcastService, MsalInterceptorConfiguration, MsalModule, MsalService, MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, MsalGuardConfiguration, MsalRedirectComponent } from '@azure/msal-angular'; const isIE = window.navigator.userAgent.indexOf('MSIE ') > -1 || window.navigator.userAgent.indexOf('Trident/') > -1; export function MSALInstanceFactory(): IPublicClientApplication { return new PublicClientApplication({ auth: { // 'Application (client) ID' of app registration in the Microsoft Entra admin center - this value is a GUID clientId: "Enter_the_Application_Id_Here", // Full directory URL, in the form of https://login.microsoftonline.com/<tenant> authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here", // Must be the same redirectUri as what was provided in your app registration. redirectUri: "http://localhost:4200", }, cache: { cacheLocation: BrowserCacheLocation.LocalStorage, storeAuthStateInCookie: isIE } }); } // MSAL Interceptor is required to request access tokens in order to access the protected resource (Graph) export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration { const protectedResourceMap = new Map<string, Array<string>>(); protectedResourceMap.set('https://graph.microsoft.com/v1.0/me', ['user.read']); return { interactionType: InteractionType.Redirect, protectedResourceMap }; } // MSAL Guard is required to protect routes and require authentication before accessing protected routes export function MSALGuardConfigFactory(): MsalGuardConfiguration { return { interactionType: InteractionType.Redirect, authRequest: { scopes: ['user.read'] } }; } // Create an NgModule that contains the routes and MSAL configurations @NgModule({ declarations: [ AppComponent, HomeComponent, ProfileComponent ], imports: [ BrowserModule, AppRoutingModule, HttpClientModule, MsalModule ], providers: [ { provide: HTTP_INTERCEPTORS, useClass: MsalInterceptor, multi: true }, { provide: MSAL_INSTANCE, useFactory: MSALInstanceFactory }, { provide: MSAL_GUARD_CONFIG, useFactory: MSALGuardConfigFactory }, { provide: MSAL_INTERCEPTOR_CONFIG, useFactory: MSALInterceptorConfigFactory }, MsalService, MsalGuard, MsalBroadcastService ], bootstrap: [AppComponent, MsalRedirectComponent] }) export class AppModule { }
O código configura o MSAL para autenticação de usuário e proteção de API. Ele configura a aplicação com
MsalInterceptor
para proteger tanto as solicitações de API como as rotas através deMsalGuard
, enquanto define os principais componentes e serviços para autenticação. Substitua os seguintes valores pelos valores do centro de administração do Microsoft Entra.- Substitua
Enter_the_Application_Id_Here
peloApplication (client) ID
da inscrição da aplicação. - Substitua
Enter_the_Tenant_Info_Here
peloDirectory (tenant) ID
da inscrição da aplicação.
- Substitua
Guarde o ficheiro.
Adicionar código de autenticação ao aplicativo
Nesta seção, você adicionará código de autenticação ao aplicativo para lidar com a autenticação do usuário e o gerenciamento de sessão. Escolha a guia apropriada com base no seu tipo de locatário.
Abra
src/app/app.component.ts
o arquivo e substitua o conteúdo pelo seguinte código:// Required for Angular import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; // Required for MSAL import { MsalService, MsalBroadcastService, MSAL_GUARD_CONFIG, MsalGuardConfiguration } from '@azure/msal-angular'; import { EventMessage, EventType, InteractionStatus, RedirectRequest } from '@azure/msal-browser'; // Required for RJXS import { Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-root', templateUrl: './app.component.html' }) export class AppComponent implements OnInit, OnDestroy { title = 'Angular - MSAL Example'; loginDisplay = false; tokenExpiration: string = ''; private readonly _destroying$ = new Subject<void>(); constructor( @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration, private authService: MsalService, private msalBroadcastService: MsalBroadcastService ) { } // On initialization of the page, display the page elements based on the user state ngOnInit(): void { this.msalBroadcastService.inProgress$ .pipe( filter((status: InteractionStatus) => status === InteractionStatus.None), takeUntil(this._destroying$) ) .subscribe(() => { this.setLoginDisplay(); }); // Used for storing and displaying token expiration this.msalBroadcastService.msalSubject$.pipe(filter((msg: EventMessage) => msg.eventType === EventType.ACQUIRE_TOKEN_SUCCESS)).subscribe(msg => { this.tokenExpiration= (msg.payload as any).expiresOn; localStorage.setItem('tokenExpiration', this.tokenExpiration); }); } // If the user is logged in, present the user with a "logged in" experience setLoginDisplay() { this.loginDisplay = this.authService.instance.getAllAccounts().length > 0; } // Log the user in and redirect them if MSAL provides a redirect URI otherwise go to the default URI login() { if (this.msalGuardConfig.authRequest) { this.authService.loginRedirect({ ...this.msalGuardConfig.authRequest } as RedirectRequest); } else { this.authService.loginRedirect(); } } // Log the user out logout() { this.authService.logoutRedirect(); } ngOnDestroy(): void { this._destroying$.next(undefined); this._destroying$.complete(); } }
O código integra o MSAL com o Angular para gerenciar a autenticação do usuário. Ele monitoriza as alterações de estado de início de sessão, exibe o estado de sessão, lida com eventos de aquisição de token, e fornece métodos para iniciar ou terminar a sessão de utilizadores com base na configuração do Microsoft Entra.
Guarde o ficheiro.