需要基于客户端证书或基于AAD令牌的身份验证在Azure应用服务中托管的web api。
我正在将一个Web API从经典云服务迁移到azure app服务。 API支持使用有效证书或有效AAD令牌的调用。 代码如下:
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
ClaimsPrincipal principal;
var cert = request.GetClientCertificate();
if (cert != null)
{
//authenticate client certificate
//Set principal from client certificate
}
else
{
//get AAD token
//authenticate & set principal
}
return await base.SendAsync(request, cancellationToken);
}
问题出在App服务中,基于证书的调用request.GetClientCertificate()返回null而不是X509Certificate2对象。因此无法验证基于证书的呼叫。
我也尝试过以下链接,但是在这种情况下,无法使用证书进行呼叫,因为它需要为整个网站制作SSL证书。 https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-configure-tls-mutual-auth
答案 0 :(得分:0)
您的解释中缺少许多细节。共享代码段无用。
在 Azure App Service 中,有一个位于托管应用程序的VM前面。为您的网络应用启用 TLS Mutual Auth 后,系统会为整个应用启用该功能。目前,没有选项可以针对特定页面或子文件夹执行此操作。
当客户端访问该站点时,前端会提示他们输入客户端证书。假设客户端将证书提供给前端,它会以主机头的形式将此证书传递给后端VM&#34; X-ARR-ClientCert 强>&#34;
我没有看到在上面的代码片段中的任何地方使用过它。您在问题中链接的文章(Azure App Service TLS Mutual Auth)中也对此进行了解释:
nodesep
您需要阅读 X-ARR-ClientCert 标题内容,然后将其转换为 X509Certificate2 对象,然后对此进行检查。