使用Angular和AzureAD进行身份验证登录

最近开始接触Angular,并且想要使用AzureAD进行身份验证,于是我进行了各种调查研究。
经过一番奋斗,我终于抵达了能够正常运行的阶段,但是为了以防后面忘记,我还是做了些备忘录。

虽然暂时可以动了,但可能不是最佳方法。请注意。

由于我使用Visual Studio进行开发,所以可能会采用一些非常规的方法。

前提的意思是指事情进行下去所必须的条件或基础。

    • Visual Studio Community 2019 (Version16.4.4)

 

    • .NET Core (ASP.NET Core 3.1)

 

    • ASP.NET Core Webアプリケーション(Angular)

 

    • Angular 8.2.12

 

    adal-angular8

操作步骤

第0步: 准备工作

创建一个ASP.NET Core Web应用程序(Angular)。

当您从”新建项目”开始,一点一点地操作,就能完成。

备考

職場または学校アカウントは選択できない.PNG

0-2. 构建项目

如果不编译项目一次,将无法在ClientApp文件夹下创建node_modules文件夹,因此请注意。
没有node_modules文件夹会造成第一步的困扰。

步骤1. 安装 adal-angular8。

正如以下文章所述,由于在客户端库(L)中添加附加项并没有成功,所以我们将从命令提示符中进行安装。在使用 Visual Studio 2019 时,我们会采用 Ant Design of Angular。

1-1. 打开开发者命令提示符

工具(T) > 命令行(L) > 开发人员命令提示符(C)

1-2. 在命令提示符中执行以下命令。

    • cd <プロジェクト名>\ClientApp

 

    npm i adal-angular8

参考:adal-angular8 – npm

1-3. 重新启动 Visual Studio。

当您通过命令提示符安装软件包时,由于某些原因,Visual Studio可能无法正确识别它们,所以我会先重新启动一次。

步骤2. 设置Azure Active Directory

创建Azure Active Directory。

沿着画面点点点就可以完成注册。

2-2. 应用程序的注册

アプリケーションの登録.PNG

在开发时,将URL输入到红框部分能够方便地进行调试。
当部署到生产环境时,需要另外添加URL。

sslPortの値.PNG

2-3. 更改认证

你需要按照以下步骤更改认证设置。
– 选择在“2-2. 应用注册”中注册的应用并进入管理界面。
– 在“隐式授予”下方选中“ID令牌”。

如果从Visual Studio的模板中创建Angular项目,会默认生成一个后端组件。
虽然隐式地勾选”ID令牌”可能是不推荐的,但出于方便考虑,这次我们会进行勾选。

步骤3. 更改源代码

我根据以下网站参考,修改了源代码。
使用 Angular 和 Azure Active Directory。

更改 app.module.ts 文件

只摘录了从模板更改的部分。

import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { Adal8Service, Adal8HTTPService } from "adal-angular8";

@NgModule({
  ...
    providers: [
      Adal8Service,
      {
        provide: Adal8HTTPService,
        useFactory: Adal8HTTPService.factory,
        deps: [HttpClient, Adal8Service]
      }
    ],
  ...
})

更改app.component.ts

import { Component, OnInit } from '@angular/core';

import { Adal8Service } from "adal-angular8";
import { adal } from "adal-angular";

const config: adal.Config = {
  tenant: '<登録したテナントID>',
  clientId: '<登録したアプリケーションID>'
}

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})

export class AppComponent implements OnInit {
  username: string;

  constructor(private service: Adal8Service) {
    this.service.init(config);
  }

  ngOnInit() {
    this.service.handleWindowCallback();

    if (!this.service.userInfo.authenticated) {
      this.service.login();
    }

    this.username = this.service.userInfo.username;
    console.log('profile', this.service.userInfo.profile);
  }

  public logout() {
    this.service.logOut();
  }
}

请参考下方图像中的值。

テナントとアプリ.PNG

第四步:确认动作

ログイン.PNG
广告
将在 10 秒后关闭
bannerAds