NETCORE基于Azure AAD B2C 实现认证鉴权

相关的代码都在GitHub开源了,可以在文章末尾中,点击阅读原文查看。

一、什么是Azure AD

学习Azure最好的也是最快的办法,就是看官网,特别是比较专业些的内容,官方都会有Demo可以看,我几年前之前第一次接触Azure相关知识的时候,也是全部参考官网。

其实网上的一些教程也都是来自网上的自我复现过程,所以大家有机会有时间还是多看看官网吧。.

https://docs.azure.cn/zh-cn/active-directory/

NETCORE基于Azure AAD B2C 实现认证鉴权

那今天说到的这个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”。并创建目录。

NETCORE基于Azure AAD B2C 实现认证鉴权

NETCORE基于Azure AAD B2C 实现认证鉴权

NETCORE基于Azure AAD B2C 实现认证鉴权

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

NETCORE基于Azure AAD B2C 实现认证鉴权

NETCORE基于Azure AAD B2C 实现认证鉴权

NETCORE基于Azure AAD B2C 实现认证鉴权

NETCORE基于Azure AAD B2C 实现认证鉴权

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

NETCORE基于Azure AAD B2C 实现认证鉴权

三、如何在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实现了认证和鉴权,那接下来,我们来看看如何实现对用户的增删改查。