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

Azure Functions隔离模式下基础认证配置及账号密码获取方法

Azure Functions 隔离模式基础认证相关问题解答

1. 如何在Azure Functions隔离模式中使用基础认证?

Azure Functions隔离模式没有内置的基础认证支持,需手动实现以下步骤:

  • 从请求头提取Authorization字段,格式为Basic <Base64编码的用户名:密码>
  • 对Base64编码部分解码,拆分得到用户名和密码
  • 自定义验证逻辑(如对比预设账号密码、调用身份验证服务等)
  • 验证不通过时返回401 Unauthorized响应

2. 如何获取SOAPUI调用函数时传入的用户名和密码?

修改函数代码,从HttpRequestData的请求头中解析基础认证信息:

[Function("Function1")]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
{
    _logger.LogInformation("C# HTTP trigger function processed a request.");

    string username = null;
    string password = null;
    // 解析基础认证头
    if (req.Headers.TryGetValues("Authorization", out var authHeaders))
    {
        var authHeader = authHeaders.FirstOrDefault();
        if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Basic "))
        {
            var encodedCredentials = authHeader["Basic ".Length..];
            var credentials = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCredentials));
            var parts = credentials.Split(':', 2);
            if (parts.Length == 2)
            {
                username = parts[0];
                password = parts[1];
            }
        }
    }

    // 验证凭据,无有效凭据则返回401
    if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
    {
        var unauthorizedResponse = req.CreateResponse(HttpStatusCode.Unauthorized);
        unauthorizedResponse.Headers.Add("WWW-Authenticate", "Basic realm=\"YourFunctionRealm\"");
        return unauthorizedResponse;
    }

    var response = req.CreateResponse(HttpStatusCode.OK);
    response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
    response.WriteString($"Welcome {username}!");

    return response;
}

3. 如何在自定义中间件中获取该用户名和密码?

在隔离模式的自定义中间件中,先从FunctionContext获取HttpRequestData实例,再按相同逻辑解析:

public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
    var req = await context.GetHttpRequestDataAsync();
    if (req != null)
    {
        string username = null;
        string password = null;
        if (req.Headers.TryGetValues("Authorization", out var authHeaders))
        {
            var authHeader = authHeaders.FirstOrDefault();
            if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Basic "))
            {
                var encodedCredentials = authHeader["Basic ".Length..];
                var credentials = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCredentials));
                var parts = credentials.Split(':', 2);
                if (parts.Length == 2)
                {
                    username = parts[0];
                    password = parts[1];
                }
            }
        }

        // 验证失败直接返回401
        if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
        {
            var unauthorizedResponse = req.CreateResponse(HttpStatusCode.Unauthorized);
            unauthorizedResponse.Headers.Add("WWW-Authenticate", "Basic realm=\"YourFunctionRealm\"");
            await context.GetInvocationResultAsync().SetResult(unauthorizedResponse);
            return;
        }

        // 将认证信息存入上下文,供后续函数使用
        context.Items["AuthenticatedUsername"] = username;
    }

    await next(context);
}

注意:生产环境中请勿硬编码用户名密码,建议使用Azure Key Vault存储认证凭据,避免明文泄露。

内容的提问来源于stack exchange,提问作者Marcer ponts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:40:23