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