You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义资源提供程序:Azure调用的身份验证实现及mTLS问询

Azure自定义资源提供程序调用的身份验证方案

证书身份验证与mTLS的关系

是的,自定义资源提供程序与Azure之间的证书身份验证**确实依赖mTLS(双向TLS)**完成双向校验:Azure会通过你配置的证书验证请求来源合法性,同时你的资源提供程序也需要验证Azure的服务证书,确保请求来自可信的Azure服务端。

GetClientCertificate的实现思路

GetClientCertificate核心是从请求的TLS上下文提取Azure发起请求所用的客户端证书,再完成合法性校验,以下是通用实现逻辑(以C#为例):

  • 从HttpContext的Connection.ClientCertificate属性获取证书对象
  • 验证证书链信任:确保证书由Azure信任的根CA签发
  • 验证证书主体:确认证书属于Azure服务主体(通常主体包含特定Azure标识信息)
  • 验证证书有效期:确保证书未过期且已生效

示例代码片段:

public async Task<IActionResult> HandleCustomRequest(HttpContext context)
{
    var clientCert = context.Connection.ClientCertificate;
    if (clientCert == null)
    {
        return Unauthorized("未提供客户端证书");
    }

    // 验证证书链(可根据场景调整吊销检查策略)
    using var chain = new X509Chain();
    chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
    var isChainValid = chain.Build(clientCert);
    if (!isChainValid)
    {
        return Unauthorized("证书链验证失败");
    }

    // 验证证书主体(需根据实际Azure证书主题调整判断逻辑)
    if (!clientCert.Subject.Contains("Azure Service Management"))
    {
        return Unauthorized("证书主体不符合Azure服务要求");
    }

    // 验证证书有效期
    if (clientCert.NotAfter < DateTime.UtcNow || clientCert.NotBefore > DateTime.UtcNow)
    {
        return Unauthorized("证书已过期或未生效");
    }

    // 后续业务逻辑处理
    return Ok("身份验证通过");
}

额外配置要点

  • 需在Azure门户中配置自定义资源提供程序的允许证书指纹,只有指纹匹配的证书发起的请求才会被路由到你的后端服务
  • 后端服务必须开启客户端证书接收:在Web服务器(如Kestrel、IIS)中配置TLS握手时要求客户端提供证书

内容的提问来源于stack exchange,提问作者El Gohr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:12:07