influxdata / influxdb-client-python

InfluxDB 2.0 python client
https://influxdb-client.readthedocs.io/en/stable/
MIT License
724 stars 187 forks source link

Token authentication for influx1.8 not working? #551

Open us319348 opened 1 year ago

us319348 commented 1 year ago

Specifications

Code sample to reproduce problem

client = InfluxDBClient(
                    url=influx_url,
                    verify_ssl=False,
                    token=influx_token,
                    debug=True
                    )

where influx_token is jwt token in string format. example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzAxODIwODAwfQ.LraKXlamiE9pr0owDgSdDt3FMKR3pVNolLVxm4ULG-8"

Used following payload when generating jwt:

{
  "username": "admin",
  "exp": 1701820800
}

Expected behavior

Should authenticate using token in V2 client. Use of same token in V1 python client works fine. Am I missing something required to parse the token before feeding it to the InfluxDBClient instantiation in V2 python client?

Actual behavior

I receive a parsing error for the token authentication:

[2023-01-06 16:23:27,933] [7642] [ERROR] [influx_connector.py:154] InfluxDB Error: (401) Reason: Unauthorized HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json', 'Request-Id': 'be28dbc8-8e10-11ed-800a-0242ac130003', 'Www-Authenticate': 'Basic realm="InfluxDB"', 'X-Influxdb-Build': 'OSS', 'X-Influxdb-Version': '1.8.3', 'X-Request-Id': 'be28dbc8-8e10-11ed-800a-0242ac130003', 'Date': 'Fri, 06 Jan 2023 22:23:27 GMT', 'Content-Length': '55'}) HTTP response body: b'{"error":"unable to parse authentication credentials"}\n'

Additional info

If I change how I feed the token parameter to something like below, the error changes to: Reason: Unauthorized HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json', 'Request-Id': '64052e35-8e0d-11ed-8032-0242ac130003', 'Www-Authenticate': 'Basic realm="InfluxDB"', 'X-Influxdb-Build': 'OSS', 'X-Influxdb-Version': '1.8.3', 'X-Request-Id': '64052e35-8e0d-11ed-8032-0242ac130003', 'Date': 'Fri, 06 Jan 2023 21:59:28 GMT', 'Content-Length': '33'}) HTTP response body: b'{"error":"authorization failed"}\n

This leads me to believe something more than just passing the token itself as a string is the problem I'm having. Are there other parameters required when using the token. Do I need to add/edit something to the token string itself?

client = InfluxDBClient(
                    url=influx_url,
                    verify_ssl=False,
                    token=f'{influx_user}:{influx_token}',
                    debug=True
                    )
Pitastic commented 1 year ago

token should be influx_user:influx_password not the real token.