Azure appservice,具有基于客户端证书或基于AAD令牌的身份验证

Azure appservice,具有基于客户端证书或基于AAD令牌的身份验证,azure,authentication,azure-web-app-service,client-certificates,Azure,Authentication,Azure Web App Service,Client Certificates,需要托管在azure应用程序服务中的基于客户端证书或基于AAD令牌的启用身份验证的web api 我正在将一个web API从经典云服务迁移到azure应用程序服务。 API支持具有有效证书或有效AAD令牌的调用。 代码如下: protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {

需要托管在azure应用程序服务中的基于客户端证书或基于AAD令牌的启用身份验证的web api

我正在将一个web API从经典云服务迁移到azure应用程序服务。 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);
}
protectedoverride async Task sendaync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
索赔主体;
var cert=request.GetClientCertificate();
如果(证书!=null)
{
//验证客户端证书
//从客户端证书设置主体
}
其他的
{
//获取AAD令牌
//验证并设置主体
}
返回wait base.sendaync(请求、取消令牌);
}
问题在于基于证书的调用请求的应用程序内服务。GetClientCertificate()返回null而不是X509Certificate2对象。因此无法对基于证书的呼叫进行身份验证。

我也尝试了下面的链接,但在这种情况下调用没有证书是不可能的,因为它使整个网站上的SSL证书要求。
你的解释中缺少很多细节。共享代码片段是无用的

在Azure应用程序服务中,有一个位于托管应用程序的VM前面的。当您为web应用启用TLS Mutual Auth时,将为整个应用启用该功能。目前没有针对特定页面或子文件夹执行此操作的选项

当客户端访问站点时,前端会提示他们输入客户端证书。假设客户端向前端提供证书,然后以主机头“X-ARR-ClientCert”的形式将此证书传递给后端VM

在上面的代码片段中,我看不到这一点。您在问题中链接的文章()也对此进行了解释:

protected void Page_Load(object sender, EventArgs e)
{
    NameValueCollection headers = base.Request.Headers;
    certHeader = headers["X-ARR-ClientCert"];
    if (!String.IsNullOrEmpty(certHeader))
    {
        try
        {
            byte[] clientCertBytes = Convert.FromBase64String(certHeader);
            certificate = new X509Certificate2(clientCertBytes); 

您需要阅读内容X-ARR-ClientCert标题,然后将其转换为X509Certificate2对象,然后对此进行检查。

您如何将带有证书的请求发送到azure web app?您现在使用的是哪种证书?您是否已将证书上载到azure web应用程序?request.GetClientCertificate()的目的是什么?这里的客户机和服务器堆栈是什么。请添加这些详细信息。@KaushalKumarPanday:它将根据该证书对象的指纹验证客户端@布兰多章:我们通常使用.pfx证书。由于这是客户端证书,我们不应该在azure应用程序中安装它,尽管我在安装后也尝试过。