Aembit Desktop concepts
Aembit Desktop: Aembit Desktop gives a person working on a Windows 11 machine access to enterprise HTTP and HTTPS services without holding static credentials. The person signs in through their organization's Identity Provider, and a local proxy injects Aembit-brokered credentials into traffic from the tools they run. authenticates a person in a browser, injects credentials into the traffic their tools send through a local proxy, and keeps the session alive for a period you set. For the steps, see Set up user access and Install Aembit Desktop and sign in.
What runs on the machine
Section titled “What runs on the machine”Aembit Desktop installs one command, adt.
adt start starts two background services that run as the signed-in person, and adt status reports on both:
- The credential service holds the person’s session tokens and renews them before they expire, without asking the person to sign in again.
- The proxy service listens on
127.0.0.1:8000by default and handles the traffic that tools send to it.
The two services talk to each other, to Aembit Cloud: Aembit Cloud serves as both the central control plane and management plane, making authorization decisions, evaluating policies, coordinating credential issuance, and providing administrative interfaces for configuration.Learn more, and to the Server Workloads your tools
reach through the proxy.
Neither listens on an address other than the loopback interface, and neither needs administrator privileges.
Each runs with the privileges of the terminal whose adt command started it, which can be adt login as well as
adt start.
The proxy service doesn’t authenticate the processes that connect to it, and it doesn’t identify which process or Windows account opened a connection. Any process on the machine that connects to the local proxy can reach every service an Access Policy allows the signed-in person, with the credential injected. Treat a signed-in session as access for everything that person runs on the machine.
Signing in
Section titled “Signing in”adt login opens a browser, and the browser is where the person authenticates.
Aembit Cloud redirects the browser to the Identity Provider your Aembit Tenant uses for Single Sign-On.
The person signs in there under whatever rules you already enforce, and the Identity Provider returns them to Aembit
Cloud.
Aembit Desktop holds no client secret, so the exchange uses the OpenID Connect (OIDC): An identity layer built on top of OAuth 2.0 that lets applications verify the identity of a user or workload and obtain basic profile information using JSON Web Tokens (JWTs).Learn more(opens in new tab) authorization code flow with PKCE (Proof Key for Code Exchange): An OAuth 2.0 extension that prevents authorization code interception attacks. The client creates a cryptographic challenge during the authorization request and proves possession of the original secret when exchanging the code for a token.Learn more(opens in new tab). The session token that results carries standard OIDC claims, which is what an Access Policy: Access Policies define, enforce, and audit access between Client and Server Workloads by cryptographically verifying workload identity and contextual factors rather than relying on static secrets.Learn more matches on.
The authorization code comes back to a Redirect URI: The callback URL where the Authorization Server redirects users after authentication. For MCP clients, the redirect URI serves as a Client Workload identifier in Aembit Access Policies.Learn more on the machine’s own loopback interface. Exchanging it for session tokens requires the PKCE verifier that Aembit Desktop created for that sign-in.
The --client-id value the person passes to adt login is the Aembit Client ID shown on the Users tab of the
Identity Provider in the Aembit Tenant UI.
It identifies the Identity Provider that signs people in, not the person and not the machine, so every person who signs
in through that Identity Provider uses the same value.
A Client Workload’s Aembit Client ID is a different value, and adt login rejects it, along with any other client ID
that isn’t for signing in a person.
Injecting a credential
Section titled “Injecting a credential”Once the person has signed in, a tool configured to use the local proxy sends its requests to the proxy service instead of to the service directly.
Aembit Cloud decides at step 2 by evaluating an Access Policy. For an HTTPS service, the proxy service makes that request once for each connection a tool opens. A tool that keeps the connection open reuses the result for later requests on it, until the connection sits idle for an hour. For a plain HTTP service, the proxy service makes the request for every request the tool sends.
When Aembit Cloud’s answer carries a lifetime, the proxy service keeps the answer for that long and doesn’t ask again until it expires. A change to an Access Policy, including one that removes access, reaches Aembit Desktop only after a kept answer expires.
The Client Workload: Client Workloads represent software applications, scripts, or automated processes that initiate access requests to Server Workloads, operating autonomously without direct user interaction.Learn more in that policy identifies Aembit Desktop, the Trust Provider: Trust Providers validate Client Workload identities through workload attestation, verifying identity claims from the workload's runtime environment rather than relying on pre-shared secrets.Learn more validates the identity the person signed in with, and the Credential Provider: Credential Providers obtain the specific access credentials—such as API keys, OAuth tokens, or temporary cloud credentials—that Client Workloads need to authenticate to Server Workloads.Learn more supplies the credential for the Server Workload: Server Workloads represent target services, APIs, databases, or applications that receive and respond to access requests from Client Workloads.Learn more the tool reaches. When no Client Workload matches the signed-in person, the proxy service passes an HTTPS connection through without reading it. The service then receives the request without an Aembit-brokered credential.
To read an HTTPS request and inject a credential into it, the proxy service terminates TLS and presents a certificate. Aembit Cloud issues it under your Aembit Tenant CA, or under the Client Workload’s standalone certificate authority when it has one. The tool has to trust that CA, which is why the person retrieves the Aembit Tenant CA certificate before they route any traffic. Aembit Desktop writes the certificate to standard output or to a file and never installs it. Nothing changes the machine’s system trust store unless the person chooses to change it.
How long a session lasts
Section titled “How long a session lasts”Two limits apply to the tokens the credential service holds, and an Aembit Tenant administrator sets both on the Identity Provider:
- Token Lifetime is how long each access token lasts and how long a session can go without renewing, 24 hours by default. The minimum is 5 minutes.
- Absolute Token Lifetime is a hard limit on the session, 30 days by default. The session ends at that point whatever the person has been doing, and they sign in again. The maximum is 365 days, and the value has to be greater than the Token Lifetime.
The credential service renews the session on its own before the access token expires.
Tool traffic doesn’t extend the session.
The session ends early when the credential service goes a full Token Lifetime without renewing, for example because the
person’s machine was off or adt stop ran.
A renewal can also fail, for example because the person’s machine had no network connection at that moment.
The credential service then stops renewing, and tools stop working when the current access token expires.
Run adt stop and then adt start to retry the renewal.
adt logout ends the session immediately and discards the stored tokens.
When the access token expires or the person runs adt logout, the proxy service has no session to act on, and it
keeps running.
When the person runs adt login, the credential service hands the new session to the proxy service, which uses it
without a restart.
The exception is a sign-in to a different Aembit Tenant while a session from the old one is still stored and the proxy
service runs.
adt login then asks to continue, signs the person out of the old Aembit Tenant, and restarts the proxy service.
The restarted proxy service reads HTTP_PROXY and HTTPS_PROXY from the shell that ran adt login.
Run that adt login from a shell where they don’t point at the local proxy, or the restart fails and the proxy service
stays down.
How settings combine
Section titled “How settings combine”Aembit Desktop reads its settings from six layers, and a value in a higher layer wins over the same value in a lower one. From highest to lowest:
- The managed settings file,
ManagedSettings.json, which no other layer overrides. - An option on the
adtcommand line. - An environment variable.
- The person’s own settings file,
Settings.json. - The system defaults file,
DefaultSettings.json. - The built-in default.
An administrator places the two system files, and the person owns their own file.
Aembit Desktop skips a file that doesn’t exist, and it ignores a key it doesn’t recognize, so a misspelled key has no
effect and produces no error.
A file that exists but isn’t valid JSON stops adt start with an error that names the file.
The background services read the settings when they start, so a change reaches them after adt stop and adt start.
Configure Aembit Desktop settings lists where each file lives and what it can set.
What gets recorded
Section titled “What gets recorded”Aembit Cloud records an for every connection or request the proxy service asks it to authorize, whether it allows the request or not.
Running alongside another proxy
Section titled “Running alongside another proxy”Many organizations already route outbound traffic through a secure web gateway, and Aembit Desktop sits in front of one
rather than replacing it.
When HTTP_PROXY or HTTPS_PROXY names an upstream proxy at the moment adt start runs, the proxy service forwards
traffic to it after injecting the credential.
For a traffic type whose variable is unset, the proxy service uses the Windows manual proxy setting instead.
It reads that setting again for every request, and it doesn’t read a proxy setup script or automatic proxy detection.
Running Edge Components behind TLS-inspecting
proxies
explains how such a gateway alters TLS traffic.
Its steps apply to Agent Proxy and Agent Controller, not to Aembit Desktop.
Two things follow from that:
- Start Aembit Desktop before you point the proxy variables at it. The proxy service reads
HTTP_PROXYandHTTPS_PROXYwhen it starts. Runadt startwhile they still name your organization’s gateway, then point them at the local proxy in the shell or the tool that needs them. When either variable already points at its own address,adt startreportsUnable to start the HTTP proxy. For a traffic type whose variable is unset,adt startchecks the Windows manual proxy setting instead. The error under the report names the traffic type and address and ends withThis would cause an infinite loop. - Two certificate authorities are in play, on two different sides of the proxy. Your tools trust your Aembit Tenant CA, or the Client Workload’s standalone certificate authority, because the local proxy presents a certificate issued under it. Aembit Desktop trusts the secure web gateway’s CA, because it’s the client that connects through the gateway.