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

NiFi单用户认证下如何通过REST API登录(Java客户端)

解决NiFi 1.20.0单用户认证下Swagger客户端调用API的问题

NiFi的单用户模式既不支持基础认证,也不支持OAuth,所以直接调用setUsername()/setPassword()或者setAccessToken()肯定行不通。要搞定认证,得先通过NiFi的专属登录接口获取有效凭证,再把凭证附加到后续API请求里。

核心思路

单用户模式下有两种可行的认证方式:

  • 调用/nifi-api/access/token获取Bearer Token,后续请求带上Authorization: Bearer <token>头(推荐,NiFi 1.10+版本支持,实现更简洁)
  • 调用/login接口获取Session Cookie,后续请求带上Cookie头

Java实现示例

方式1:Bearer Token认证

先用HTTP客户端获取Token,再配置Swagger的ApiClient:

import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

// 1. 获取Bearer Token
String nifiBaseUrl = "http://your-nifi-host:port";
String username = "your-single-user-username";
String password = "your-single-user-password";

OkHttpClient loginClient = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
        .add("username", username)
        .add("password", password)
        .build();

Request loginRequest = new Request.Builder()
        .url(nifiBaseUrl + "/nifi-api/access/token")
        .post(formBody)
        .build();

Response loginResponse = loginClient.newCall(loginRequest).execute();
String authToken = loginResponse.body().string().trim();

// 2. 配置Swagger ApiClient
ApiClient client = Configuration.getDefaultApiClient()
        .setBasePath(nifiBaseUrl)
        .setVerifyingSsl(false);

// 添加Authorization头
client.addDefaultHeader("Authorization", "Bearer " + authToken);

// 调用API示例:获取所有处理器
ProcessorsApi processorsApi = new ProcessorsApi(client);
ProcessorsEntity processors = processorsApi.getProcessors();

方式2:Session Cookie认证

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

// 1. 登录获取Session Cookie
String nifiBaseUrl = "http://your-nifi-host:port";
String username = "your-single-user-username";
String password = "your-single-user-password";

HttpURLConnection connection = (HttpURLConnection) new URL(nifiBaseUrl + "/login").openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

String postData = "username=" + URLEncoder.encode(username, "UTF-8") 
        + "&password=" + URLEncoder.encode(password, "UTF-8");
try (OutputStream os = connection.getOutputStream()) {
    byte[] input = postData.getBytes("utf-8");
    os.write(input, 0, input.length);
}

// 提取Session Cookie
String sessionCookie = connection.getHeaderField("Set-Cookie");

// 2. 配置Swagger ApiClient
ApiClient client = Configuration.getDefaultApiClient()
        .setBasePath(nifiBaseUrl)
        .setVerifyingSsl(false);

client.addDefaultHeader("Cookie", sessionCookie);

// 后续API调用同Token方式

Python示例

import requests
from swagger_client import Configuration, ApiClient, ProcessorsApi

nifi_base_url = "http://your-nifi-host:port"
username = "your-single-user-username"
password = "your-single-user-password"

# 获取Bearer Token
token_response = requests.post(
    f"{nifi_base_url}/nifi-api/access/token",
    data={"username": username, "password": password}
)
auth_token = token_response.text.strip()

# 配置Swagger客户端
config = Configuration()
config.host = nifi_base_url
config.verify_ssl = False
config.api_key["Authorization"] = f"Bearer {auth_token}"
config.api_key_prefix["Authorization"] = ""

client = ApiClient(config)
processors_api = ProcessorsApi(client)
processors = processors_api.get_processors()

Go示例

package main

import (
	"bytes"
	"fmt"
	"net/http"
	"net/http/cookiejar"
	nifiClient "your-swagger-go-client-package" // 替换为实际生成的Go客户端包路径
)

func main() {
	nifiBaseUrl := "http://your-nifi-host:port"
	username := "your-single-user-username"
	password := "your-single-user-password"

	// 创建带CookieJar的客户端获取Session Cookie
	jar, _ := cookiejar.New(nil)
	httpClient := &http.Client{Jar: jar}

	loginData := bytes.NewBufferString(fmt.Sprintf("username=%s&password=%s", username, password))
	loginReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/login", nifiBaseUrl), loginData)
	loginReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	httpClient.Do(loginReq)

	// 配置Swagger客户端
	swaggerConfig := nifiClient.NewConfiguration()
	swaggerConfig.Host = nifiBaseUrl[7:] // 去掉http://前缀,根据实际情况调整
	swaggerClient := nifiClient.NewAPIClient(swaggerConfig)

	// 附加Cookie到默认请求头
	sessionCookie := jar.Cookies(loginReq.URL)[0]
	swaggerClient.DefaultHeader["Cookie"] = fmt.Sprintf("%s=%s", sessionCookie.Name, sessionCookie.Value)

	// 调用API示例
	processors, _, err := swaggerClient.ProcessorsApi.GetProcessors(nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(processors)
}

内容的提问来源于stack exchange,提问作者Alain B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:25:48