Most firms have sturdy exterior safety, e.g. blocking all entry to manufacturing property utilizing a firewall, and requiring a VPN to get “inside” entry to manufacturing environments. Nevertheless, as soon as you’re linked to the VPN, the inner techniques are normally very poorly protected, and there’s little to no authentication and authorization for inner instruments and providers.
Two frequent threats to inner safety are compromised worker laptops and provide chain assaults. In these eventualities, the attacker operates behind the firewall, typically with unrestricted community entry.
Companies with an online ui may be secured utilizing an utility load balancer, e.g. an AWS ALB with OIDC, however how do you shield entry to command line interface (CLI) primarily based instruments? Requiring a username and password for each CLI invocation makes it painful to make use of and storing the credentials on the system leaves them broad open in case the pc they reside on is compromised.
The Command Line
Most inner instruments have a CLI to handle the providers which are used throughout the firm and lots of are poorly protected. What’s the easiest way to authorize CLIs? And how are you going to tie authorization into the corporate’s SSO?
One possibility is to deploy Hashicorp Vault, however that’s plenty of setup and upkeep, so except you will have a workforce to function it, Vault won’t be a very good match.
Another choice is the OAuth2 machine authorization grant (RFC8628), which is what this weblog submit will present you learn how to use.
The OAuth 2.0 machine authorization grant is designed for Web-connected gadgets that both lack a browser to carry out a user-agent-based authorization or are enter constrained to the extent that requiring the consumer to enter textual content so as to authenticate throughout the authorization movement is impractical. It permits OAuth purchasers on such gadgets (like good TVs, media consoles, digital image frames, and printers) to acquire consumer authorization to entry protected assets through the use of a consumer agent on a separate machine.
When you ever used the AWS CLI with Single SignOn, that is what it does.
OAuth2 Machine Movement
The Machine Authorization Movement accommodates two totally different paths; one happens on the machine requesting authorization (the CLI) and the opposite happens in a browser. The browser movement path, whereby a tool code is certain to the session within the browser, happens as a parallel path half within the machine movement path.
Implementing the OAuth Machine Movement
Now we’ll have a look at what the above sequence diagram appears like when it’s applied.
The inner CLI software at Rockset is named rsctl and is written in go. Step one is to provoke the machine movement to get a JWT entry token.
$ rsctl login
Making an attempt to routinely open the SSO authorization web page in your default browser.
If the browser doesn't open otherwise you want to use a distinct machine to authorize this request, open the next URL:
https://rockset.auth0.com/activate?user_code=BBLF-JCWB
Then enter the code:
BBLF-JCWB
Efficiently logged in!
In case you are utilizing the CLI after logging in to a different laptop, e.g. ssh:ing to a Linux server, and you utilize macOS, you possibly can configure iTerm to routinely open the hyperlink utilizing a “Run command” set off.
The web page that the hyperlink takes you to appears like this:

After getting confirmed that the “consumer code” is appropriate (matches with what the CLI reveals), and also you click on “Affirm”, it should take you thru the conventional OAuth2 login process (which in our case requires a username, password and {hardware} token).
As soon as the authentication is accomplished, you’ll be redirected and offered with a dialog just like the one beneath, and you may shut the browser window.

The CLI has now obtained a jwt entry token which is legitimate for numerous hours and is used to authenticate by way of inner providers. The token may be cached on disk and reused between CLI invocations in the course of its lifetime.
Once you situation a brand new rsctl command, it should learn the cached Entry Token from disk, and use it to authenticate with the inner APIs.
Underneath the Hood
We’ve got applied and open sourced a go module to carry out the machine authorization movement (github.com/rockset/device-authorization). It helps each Auth0 and Okta as OAuth suppliers.
Pattern Code
The next code is accessible within the instance listing within the git repository.
Embedded content material: https://gist.github.com/pmenglund/5ed2708cdb88b6a6982258aed59a0899
We now have a JWT token, which can be utilized to authenticate REST calls by setting the Authorization header to Bearer: <jwt entry token>
Embedded content material: https://gist.github.com/pmenglund/b2ac7bb15ce25755a69573f5a063cb14
It’s now as much as the receiving finish to validate the bearer token, which may be achieved utilizing an AWS ALB with OIDC authentication or a supplier particular API from the API server.
Offline Validation
Another choice for entry token validation is “offline validation”. In offline validation, the API server will get the general public key used to signal the JWT token from the supplier (and caches the general public key) and performs the validation within the API server, as a substitute of creating a validation request to the supplier.
Residual Danger
One factor this doesn’t shield in opposition to is an attacker with a foothold on the pc that executes the CLI. They’ll simply wait till the consumer has accomplished the authentication, and they’re going to then be capable of act because the consumer in the course of the entry token.
To mitigate this threat, you possibly can require a one time password (OTP), e.g. a Yubikey, each time the consumer performs a privileged motion.
$ rsctl delete useful resource foobar
please enter yubikey OTP: ccccccvfbbcddjtuehgnfrbtublkuufbgeebklrubkhf
useful resource foobar deleted
Closing Ideas
On this weblog, we’ve got proven how we constructed and open-sourced a go module to safe the Command Line Interface (CLI) utilizing an OAuth2 machine authorization movement that helps each Auth0 and Okta SSO suppliers. You may add this go module to your inner instruments and cut back inner safety threats.
