Azure功能 - 配置客户端证书身份验证

时间:2018-04-06 05:59:26

标签: azure azure-functions azure-functions-runtime

消费计划中,功能是否支持使用客户端证书授权访问功能?类似于here描述的方法?基本上,如果调用者没有提供有效的客户端证书,我正在寻找函数运行时立即拒绝连接请求,而不必在代码中实现该授权例程。

3 个答案:

答案 0 :(得分:2)

根据您的要求,我创建了我的C#HttpTrigger函数来检查这个问题,这是核心代码:

if(req.Headers.Contains("X-ARR-ClientCert")) 
{   
    byte[] clientCertBytes = Convert.FromBase64String(req.Headers.GetValues("X-ARR-ClientCert").FirstOrDefault());
    var clientCert = new X509Certificate2(clientCertBytes);
    return req.CreateResponse(HttpStatusCode.OK,"Thumbprint: "+clientCert.Thumbprint);
}
return req.CreateResponse(HttpStatusCode.OK, "Hello world");

对于App Service Plan,该功能可以如下工作:

enter image description here

根据我的测试,该功能也可以在消费计划下按预期工作。

您可以关注How To Configure TLS Mutual Authentication for Web App或只是登录Azure门户并转到您的功能应用,点击" NETWORKIING> SSL"在Platform fetures选项卡下,然后启用Incoming client certificate选项。

答案 1 :(得分:0)

这是我想出的代码:

X509Certificate2 clientCert = req.GetClientCertificate();

if (!IsValidClientCertificate(clientCert))
{
    return req.CreateErrorResponse(HttpStatusCode.Unauthorized, "A valid client certificate is not found");
}

基本验证功能:

static bool IsValidClientCertificate(X509Certificate2 clientCert)
{
    // check the cert's thumbprint against expected thumbprint
    if (clientCert.Thumbprint != "<expected thumprint>"
    { 
        return false;
    }

    // check that we're within the cert's validity period
    if (DateTime.Now > clientCert.NotAfter || DateTime.Now < clientCert.NotBefore)
    {
        return false;
    }

    // optionally check cert chaining validity
    // if(!clientCert.Verify()) { return false; }
}

答案 2 :(得分:0)

是的。如果我对您的理解正确,那么您想以403拒绝任何没有客户端证书的https请求

这是如何使用Azure CLI启用它

az webapp update --set clientCertEnabled=true --name <app_name> --resource-group <group_name>

Microsoft文档here

您也可以从Azure功能应用程序=>配置=>常规设置下的Azure门户执行此操作

Enable client Cert