相关的代码都在GitHub开源了,可以在文章末尾中,点击阅读原文查看。
一、什么是Azure AD
学习Azure最好的也是最快的办法,就是看官网,特别是比较专业些的内容,官方都会有Demo可以看,我几年前之前第一次接触Azure相关知识的时候,也是全部参考官网。
其实网上的一些教程也都是来自网上的自我复现过程,所以大家有机会有时间还是多看看官网吧。.
https://docs.azure.cn/zh-cn/active-directory/

那今天说到的这个Azure AD到底是个什么呢?AAD全称是,Azure Active Directory (Azure AD) 是一种基于云的标识和访问管理服务。Azure AD 可帮助组织内的员工访问外部资源,例如 Microsoft 365、Azure 门户和数以千计的其他 SaaS 应用程序。Azure Active Directory 还可帮助他们访问内部资源,例如企业 Intranet 上的应用,以及我们自己的组织开发的任何云应用,比如NETCORE微服务,或者JAVA微服务,或者VUE/REACT等前端项目。而且官方客服也是很积极和热情的,基本遇到的问题,都会解决,微软能靠Azure云服务翻身成世界市值第一是有一定的道理的。
我们都知道SSO统一认证平台,也用过类似IdentityServer4这种认证平台,都是基于包含Oauth 2.0和Open ID Connect的身份验证服务。那Azure AD 其实也是这样一个平台,它基于微软云来对应用进行授权访问管理服务,帮助我们在Azure中登录和访问资源。我们可以通过Azure的标识平台生成应用程序,采用微软标识登录,以及获取令牌来调用受保护的API资源。
二、在Azure上添加租户
1、在Azure Portal 上选择 菜单 “Azure Active Directory”。并创建目录。



2、新应用注册,并获取对应的租户参数




注意那个终结点,每个平台是不一样的,比如Azure国际版和国内版,这里直接copy就行。

三、如何在ASP.NETCore API中使用AAD
1、应用nuget包
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.8" NoWarn="NU1605" /><PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.8" NoWarn="NU1605" /><PackageReference Include="Microsoft.Identity.Web" Version="1.14.1" />
2、注册相应的服务
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAdB2C"));
3、获取对应的配置参数
在配置文件中配置
"AzureAdB2C": {"Instance": "https://xxxx.b2clogin.cn","ClientId": "31xxxxxxxxx6","Domain": "xxxxxx.partner.onmschina.cn","TenantId": "xxxx""SignUpSignInPolicyId": "B2C_1_LoginOnly"},
启动的时候赋值
AzureAdB2CSetup.Instance = Configuration["AzureAdB2C:Instance"];AzureAdB2CSetup.ClientId = Configuration["AzureAdB2C:ClientId"];AzureAdB2CSetup.Domain = Configuration["AzureAdB2C:Domain"];AzureAdB2CSetup.SignUpSignInPolicyId = Configuration["AzureAdB2C:SignUpSignInPolicyId"];
4、接着开启中间件配置
app.UseAuthentication();app.UseAuthorization();
5、配置权限处理器
对每一个请求进行拦截。
/// <summary>/// Custom authorze configuration handler./// </summary>public class ClaimsRequirementHandler : AuthorizationHandler<ClaimRequirement>{protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ClaimRequirement requirement){var claim = context.User.Claims.FirstOrDefault(c => c.Type == requirement.ClaimName);if (claim != null && claim.Value.Contains(requirement.ClaimValue)){context.Succeed(requirement);}return Task.CompletedTask;}}
上边可以随便写自己的业务逻辑,多复杂都行,也可以基于数据库表和其他业务逻辑。
最后别忘了做相应的服务注册。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();services.AddSingleton<IAuthorizationHandler, ClaimsRequirementHandler>();
到这里,我们已经集成了AAD B2C实现了认证和鉴权,那接下来,我们来看看如何实现对用户的增删改查。