I set up an Entra ID app registration, an external JWT signer and an auth policy as per the docs. I assigned the auth policy to the identity I’m testing with.
When I try to log in with sudo ziti-edge-tunnel ext-jwt-login -i roche-ziti-client -p entra I get the following error:
{"Success":false,"Error":"ziti context not found","Code":500}
I’m very likely missing steps since I didn’t find any docs on how to set up auth with an external JWT signer under Linux Tunneller | NetFoundry Documentation
The tunneler logs show the following:
(161395)[ 1.019] DEBUG
ziti-sdk:ziti_ctrl.c:503 ctrl_body_cb()
ctrl[``https://ziti-api.mydomain.com:443``] completed
POST[/authenticate?method=cert] in 0.360 s(161395)[ 1.019] ERROR
ziti-sdk:ziti_ctrl.c:525 ctrl_body_cb()
ctrl[``https://ziti-api.mydomain.com:443``] API
request[/authenticate?method=cert] failed code[INVALID_AUTH] messageThe
authentication request failed[ 1.019] ERROR
ziti-sdk:ziti_ctrl.c:389 ctrl_login_cb()
ctrl[``https://ziti-api.mydomain.com:443``] INVALID_AUTH(The authentication
request failed)(161395)[ 1.019] DEBUG ziti-sdk:ziti_ctrl.c:380
ziti_ctrl_clear_api_session() ctrl[``https://ziti-api.mydomain.com:443``]
clearing api session token for ziti_controller(161395)[ 1.019] WARN
ziti-sdk:legacy_auth.c:183 login_cb() failed to login to
ctrl[``https://ziti-api.mydomain.com:443``] INVALID_AUTH[-14] The authentication
request failed(161395)[ 1.019] DEBUG ziti-sdk:ziti.c:271
ziti_set_impossible_to_authenticate() ztx[0] setting api_session_state[0] to
4(161395)[ 1.019] DEBUG ziti-sdk:ziti_ctrl.c:380
ziti_ctrl_clear_api_session() ctrl[``https://ziti-api.mydomain.com:443``] clearing api session token for ziti_controller(161395)[ 1.019] WARN tunnel-cbs:ziti_tunnel_ctrl.c:1018 on_ziti_event() ziti_ctx controller connections failed: failed to authenticate(161395)[ 1.019] INFO ziti-edge-tunnel:ziti-edge-tunnel.c:460 on_event() ztx[/opt/openziti/etc/identities/roche-ziti-client.json] context event : status is failed to authenticate(161395)[ 1.019] ERROR ziti-edge-tunnel:ziti-edge-tunnel.c:514 on_event() ztx[/opt/openziti/etc/identities/roche-ziti-client.json] failed to connect to controller due to failed to authenticate(161395)[ 1.019] DEBUG ziti-edge-tunnel:ipc_event.c:119 send_events_message() Events Message => {"Op":"identity","Action":"added","Fingerprint":"roche-ziti-client","Id":{"Name":"roche-ziti-client","Identifier":"/opt/openziti/etc/identities/roche-ziti-client.json","FingerPrint":"roche-ziti-client","Active":true,"Loaded":true,"IdFileStatus":false,"NeedsExtAuth":false,"MfaEnabled":false,"MfaNeeded":false,"Metrics":{"Up":0,"Down":0},"MfaMinTimeout":0,"MfaMaxTimeout":0,"MfaMinTimeoutRem":0,"MfaMaxTimeoutRem":0,"MinTimeoutRemInSvcEvent":0,"MaxTimeoutRemInSvcEvent":0,"Deleted":false,"Notified":false}}
I see it’s trying to use method=cert. How do I instruct it to use JWT?
FWIW, the tunneler connects and works perfectly when using a manually created JWT file with:
ziti edge create identity "roche-ziti-client" --jwt-output-file /tmp/roche-ziti-client.jwt
I appreciate any help getting this working!


