NEWS

技术文章

ASP.NET Core 3.0中支持AI的生物识别安全

编辑:
起点网络
发布时间:
2019-9-9
点击:
本文共两个部分,这是第一部分,其中介绍了 ASP.NET Core 3 中旨在将授权逻辑与基本的用户角色相分离的基于策略的授权模型。

此部分提供了此授权进程的基于生物识别信息(如人脸识别或语音识别)的具体示例。

在此示例中,检测到未经授权的入侵时,将限制进入建筑。

Azure 机器学习内置的异常检测服务将评估入侵的严重性。

进入场地

上下文是受高度保护的场地 - 如军区、医院或数据中心。通过一些限制来仅允许已授权的人员进入。下列步骤说明了在各个门口执行的用于进行人员签入的安全流:

要求进入建筑的人员在门口的读卡器上刷其访问通信证。
摄像头检测手势,并捕获此人的面部和肢体;此过程应防止使用诸如打印的照片之类的来欺骗仅具有人脸识别的摄像头。
读卡器和摄像头注册为物联网 (IoT) 设备,并将录制的数据流式传输到 Azure IoT 中心。
Microsoft 认知服务将此人与已授权进入建筑的人员数据库进行比较。
授权流将 IoT 设备采集的生物识别信息与访问通信证上的人员身份进行匹配。
调用 Azure 机器学习服务来评估访问申请的风险级别,并评估是否属于未经授权的入侵。
ASP.NET Core Web API 核对前面的步骤中定义的配置文件包含的特定策略要求,并授予权限。
若检测到的人员身份与访问通信证不一致,将立即阻止其进入场地。反之,流查看是否存在下面的任何异常,并继续操作:

进入建筑的频率异常。
此人之前是否曾进入此建筑(签出)。
每日允许的访问次数。
此人是否值班。
建筑的关键性(可能无需限制对餐厅的访问,但要对服务器数据中心访问执行严格的策略)。
此人是否带领其他人或携带其他物品同行。
同一个建筑发生过的类似访问异常。
过去评估的风险级别的变化。
过去检测到的入侵次数。
Azure 机器学习运行异常检测服务,此服务返回评分来表示访问偏离标准值的可能性。

使用 0 到 1 之间的数值表示此评分,其中 0 表示“未检测到风险”、一切正常、已受到完全信任;1 表示“红色警报”,要立即阻止进入!对于大于 0 的任意值,由各个建筑的风险级别决定用于允许进入建筑的可接受阈值。

ASP.NET Core 中的授权

ASP.NET Core 提供简单的授权声明性角色和丰富的基于策略的模型。使用要求表示授权,由处理程序针对这些要求评估用户的声明。

为说明如何向要访问场地的用户授权,下文将介绍如何生成自定义策略要求以及其授权处理程序。

有关 ASP.NET Core 中的授权模型的详细信息,请参阅 bit.ly/2UYZaJh 中的文档。

如上所述,自定义的基于策略的授权机制由要求和(通常情况下)授权处理程序组成。授权访问建筑包括调用打开入口门锁的 API。

IoT 设备将生物识别信息流式传输到 Azure IoT 中心,进而通过发送场地 ID(场地的唯一标识符)触发验证工作流。

若验证成功,Web API POST 方法仅返回 HTTP 代码 200 及包含用户名和场地 ID 的 JSON 消息。反之,它引发相应的 HTTP 401“访问未经授权”错误代码。

接下来我们按顺序操作:从 Web API 的 Startup 类开始,ConfigureServices 方法尤为重要,其中包含配置所需服务以运行 ASP.NET Core 应用程序的说明。

在服务对象上调用 AddAuthorization 方法,以添加授权策略。

调用 AddAuthorization 方法以授权其执行时,它接受 API 函数必须拥有的策略集合。在本示例中,仅需要一个策略,我们称其为“AuthorizedUser”。

但是此策略包含多个要满足的要求,它们反映了要验证的人员的生物特性:面部、肢体和声音。

这三个要求分别由实现 IAuthorizationRequirement 接口的特定类表示,如图 1 所示。列出 AuthorizedUser 策略的要求时,还指定了满足要求所需的可信度。

如前文所述,此值介于 0 和 1 之间,并且表示相应的生物属性识别的准确性。

稍后在探讨使用认知服务进行生物识别时,我们将继续介绍它。

图 1 Web API 中的授权要求的配置

publicvoid ConfigureServices(IServiceCollection services)

{

varauthorizationRequirements = newList<IAuthorizationRequirement>

{

newFaceRecognitionRequirement(confidence: 0.9),

newBodyRecognitionRequirement(confidence: 0.9),

newVoiceRecognitionRequirement(confidence: 0.9)

};

services

.AddAuthorization(options =>

{

options.AddPolicy( "AuthorizedUser", policy => policy.Requirements =

authorizationRequirements);

})

AuthorizedUser 授权策略包含多个授权要求,必须满足所有要求才能使策略评估成功。换言之,按照 AND 原则处理添加到单个授权策略的多个授权要求。

在此解决方案中实现的三个策略要求都是实现 IAuthorizationRequirement 接口的类。此接口实际为空;也就是说,它不指示任何方法的实现。

一致通过以下方式实现这三个要求:指定 ConfidenceScore 公共属性来捕获若要视为此要求“成功”识别 API 应达到的预期可信度。

FaceRecognitionRequirement 类如下所示:

publicclassFaceRecognitionRequirement: IAuthorizationRequirement

{

publicdoubleConfidenceScore { get; }

publicFaceRecognitionRequirement(doubleconfidence) =>

ConfidenceScore = confidence;

}

以同样的方式分别在 BodyRecognitionRequirement 和 VoiceRecognitionRequirement 类中实现针对肢体和语音识别的其他要求。

通过授权属性控制对执行 Web API 操作的授权。简而言之,通过向控制器或操作应用 AuthorizeAttri-bute,来将该控制器或操作的访问权限限制在所有已授权用户范围内。控制场地访问的 Web API 公开单个访问控制器,其中仅包含 Post 操作。

若已满足指定的“AuthorizedUser”策略中的所有要求,将向此操作授权:

[ApiController]

publicclassAccessController: ControllerBase

{

[HttpPost]

[Authorize(Policy = "AuthorizedUser")]

publicIActionResult Post([FromBody] stringsiteId)

{

varresponse = new

{

User = HttpContext.User.Identity.Name,

SiteId = siteId

};

returnnewJsonResult(response);

}

}

由授权处理程序管理各个要求,如图 2 中所示,它负责评估策略要求。可以选择让所有要求共用单个处理程序,也可以选择让各个要求拥有单独的处理程序。

后面的方式更为灵活,因为它允许配置渐变的授权要求,这样就可以轻松地在 Startup 类中配置它们。

面部、肢体和声音要求处理程序扩展 AuthorizationHandler<TRequirement> 抽象类,其中 TRequirement 是要处理的要求。

由于要评估三个要求,因此需要编写自定义处理程序来分别扩展 FaceRecognitionRequirement、BodyRecognitionRequirement 和 VoiceRecognitionRequirement 的 AuthorizationHandler。

具体而言,由 HandleRequirementAsync 方法决定是否满足授权要求。由于此方法为异步方法,因此它不返回实际值,指示任务已完成时除外。

处理授权包括在授权处理程序上下文上调用 Succeed 方法以将要求标记为“成功”。

此过程实际上由“识别器”对象验证,它在内部使用认知服务 API(详见下一部分)。

识别方法执行的识别操作获取所识别人员的姓名,并返回一个值(评分)来可信度,即识别准确度高(值接近 1)或准确度低(值接近 0)。

在 API 设置中指定了预期 API。可以将此值调整为任何适用于解决方案的阈值。

图 2 自定义授权处理程序

publicclassFaceRequirementHandler :

AuthorizationHandler<FaceRecognitionRequirement>

{

protectedoverride Task HandleRequirementAsync(

AuthorizationHandlerContext context,

FaceRecognitionRequirement requirement)

{

stringsiteId =

(context.Resource as HttpContext).Request.Query["siteId"];

IRecognition recognizer = newFaceRecognition;

if(recognizer.Recognize(siteId, out stringname) >=

requirement.ConfidenceScore)

{

context.User.AddIdentity(newClaimsIdentity(

newGenericIdentity(name)));

context.Succeed(requirement);

}

returnTask.CompletedTask;

}

}

除了评估特定要求,授权处理程序还为当前用户添加身份声明。生成身份后,可以为它分配一个或多个由受信任方发布的声明。声明是表示主体身份的姓名-值对。

在此示例中,将为上下文中的用户分配身份声明。

然后在访问控制器的 Post 操作中检索此声明,并将其作为 API 响应的一部分返回。

启用此自定义授权进程的最后一个步骤是注册 Web API 内的处理程序。进行配置时,在服务集合中注册处理程序:

services.AddSingleton< IAuthorizationHandler, FaceRequirementHandler>;

services.AddSingleton< IAuthorizationHandler, BodyRequirementHandler>;

services.AddSingleton< IAuthorizationHandler, VoiceRequirementHandler>;

此代码使用 ASP.NET Core 的内置依存关系注入 (DI) 框架将各个要求处理程序注册为单一实例。启动应用程序时,将生成此处理程序的实例,依存关系注入将注册的类注入到相关对象。

人脸识别

此解决方案将 Azure 认知服务用于视觉 API,来识别人的面部和肢体。有关认知服务及此 API 的详细信息,请参阅 bit.ly/2sxsqry。

视觉 API 提供人脸属性检测和人脸验证。人脸检测指从图像中检测人脸的功能。

此 API 返回所处理的图像中人脸位置的矩形坐标,还可以提取一系列与人脸相关的属性,如头部姿势、性别、年龄、表情、面部毛发和眼镜。

人脸验证与之相反,它针对人员的预保存人脸验证检测到的人脸。它实际上是在评估两个人脸是否属于同一个人。这是用于此安全项目的特定 API。

请将下面的 NuGet 包添加到 Visual Studio 解决方案,以开始使用:Microsoft.Azure.Cognitive-Services.Vision.Face 2.2.0-preview

.NET 托管的包处于预览状态,因此在浏览 NuGet 时务必选中“包括预发行版”选项,如图 3 所示





.NET 包、人脸检测和人脸识别的用法非常简单。大体而言,人脸识别说明了比较两个不同的人脸以确定它们是否相似或是否属于同一个人的工作过程。识别操作主要使用图 4 列出的数据结构。
标签  asp.net技术 网站开发
相关文章

Copyright@宁波起点网络. All rights reserved. Powered by 阳程网络       备案号:浙ICP备 16017710号