云环境下的微服务架构与身份验证

在当今的软件开发领域,微服务架构因其灵活性和可扩展性而受到青睐。随着云计算技术的发展,云平台为微服务提供了理想的运行环境。本文将探讨如何在云环境中构建微服务架构,并使用AzureActive Directory进行身份验证

微服务架构的需求

在构建微服务架构时,需要考虑以下几个关键需求:

  • 自动伸缩性:服务应能够根据负载自动扩展或缩减资源。
  • 云环境支持:需要一个功能丰富且得到良好支持的云平台。
  • 单一登录能力:能够轻松集成任何身份提供者。

Azure Active Directory是一个企业级的身份提供者,适用于B2B和B2C解决方案。

API网关和微服务部署在Azure Web App上,以便于轻松地进行水平或垂直扩展。与虚拟机或AKS相比,使用Azure Web App托管微服务成本更低。

安全性

为了保护托管在Azure Web App下的微服务,需要使用启用了服务端点的虚拟网络,将Azure Web App加入到该虚拟网络,并限制所有外部访问,只允许来自虚拟网络的请求。

微服务间的通信

微服务之间的通信是异步的HTTP通信,由处理。该库涵盖了网络调用、序列化/反序列化、契约映射等功能。通过依赖注入(DI)将服务接口注入到构造函数中,就像在进程内服务注入一样使用微服务。

Angular前端

在Angular前端,使用adal-angular4库对Azure Active Directory用户进行身份验证,并在调用任何API时自动附加JWT承载令牌。

@Component({ selector: 'app-reports', templateUrl: './reports.component.html', styleUrls: ['./reports.component.css'] }) export class ReportsComponent implements OnInit { displayedColumns: string[] = ['tasks', 'totalMinutes', 'day']; dataSource = ELEMENT_DATA; constructor(private http: HttpClient) { } ngOnInit() { this.http.get(`${environment.config.apiGateway}/api/Reports/MonthlyReportByUser`) .subscribe(x => { this.dataSource = x; }); } }

启动Angular应用

要启动Angular应用,请在命令行中输入:

ng serve

后端微服务注册

在Discovery.config中注册微服务:

ASP.NET Core集成

在ASP.NET Core的Startup.cs中集成微服务:

public void ConfigureServices(IServiceCollection services) { ... services.AddTransient((o) => StandardKernel.Get()); services.AddTransient((o) => StandardKernel.Get()); }

在API网关中注入远程服务

[Authorize] [Route("api/[controller]")] [ApiController] public class ReportsController : ControllerBase { private IReportService _reportService; public ReportsController(IReportService reportService) { _reportService = reportService; } [HttpGet] [Route("MonthlyReportByUser")] public async Task GetMonthlyReportByUser() { var token = await this.HttpContext.GetTokenAsync("access_token"); return await _reportService.GetMonthlyReportByUserAsync(token); } }

启动后端API网关和微服务

在Visual Studio 2019中运行这些项目即可启动后端API网关和微服务。

数据流

登录演示用户后,点击“Timesheet”菜单即可从服务器检索数据。数据流如下:

  • Angular应用
  • API网关
  • ReportService(在Azure表中检索报告数据)
  • AuthService(检索已登录用户信息)
  • AuthService(将注册信息添加到Azure表)
  • 将消息推送到Azure队列以触发Azure登录应用创建AD用户并发送带有初始密码的电子邮件

用户注册信息被推送到Azure存储队列,有一个Azure逻辑应用将处理用户创建并发送带有初始密码的电子邮件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485