Proxy Authentication via Server Auth
Server Authentication will allow you to secure any/all location blocks at your web server/proxy level, only allowing authenticated Organizr users or administrators access. The result of enabling this feature will disallow users from going to https://domain.com/sonarr directly without authenticating with Organizr first.
Note that this method will only provide an Authorization layer but will not actually pass any Authentication information / credentials to the underlying back-end services, since this would require some cooperation from these services to understand it. So these services will still be accessed as a guest / unauthenticated user, but this is often good enough for many services.
For more information regarding the differences between Authorization vs Authentication, check out this website: https://www.geeksforgeeks.org/difference-between-authentication-and-authorization/
Certain providers block wildcard cookies from being set which prevents this from working with subdomains. The most common of these is DuckDNS. For a full list see the bottom of this page.
There are two methods you may use to enable authorization, via the Organizr authorization API or using OAuth / JWT tokens.
The Organizr authorization API method has the drawback of making calls to Organizr's authorization API for each and every HTTP request made against your protected location blocks, therefore impacting performance.
The Oauth / JWT Token method allows you to securely trust the Organizr authentication simply based on the JWT token passed in your authenticated requests cookies. It does not require any extra roundtrip to the Organizr API, nor the rewrite directives.
To utilize the block add
auth_request /organizr-auth/$;See table below:
Any logged in user
The first method has the drawback of making calls to Organizr's authorization API for each and every HTTP request made against your protected location blocks, therefore impacting performance.
This method allows you to securely trust the Organizr authentication simply based on the JWT token passed in your authenticated requests cookies. It does not require any extra roundtrip to the Organizr API, nor the rewrite directives.
The flow is as follows:
- 1.An unauthenticated user accesses Organizr UI and logs in, using any of the supported login methods.
- 2.After successful login, the browser will keep an authentication cookie generated by Organizr using the standard JSON Web Token (JWT) format. This signed token includes a number of claims (such as user id, group memberships etc) that the user has. For more info on this standard, visit https://jwt.io/
- 3.This cookie is then passed to any subsequent visit to your Organizr domain and subdomains.
- 4.Capable web servers can easily read the JWT token from this cookie and validate it to trust the user's identity and make an allow/deny decision based on the claims mentioned in the token.
You can easily check the contents of Organizr-generated JWT tokens by inspecting your browser cookies and pasting the contents of the cookie named
organizr_token_<uuid>to a JWT inspector such as https://jwt.io/
Once decoded, an Organizr token includes a JWT payload similar to this:
"email": "[email protected]",
It includes various claims such as your user name, group name, user id, group id, which can all be used by your JWT-aware web server to make an authorization decision.
Of course, your web server should not blindly trust the content of the JWT token since it cold have been forged. In order to trust the token content, your web server will need to validate its signature. This requires the server to know a secret specific to your Organizr instance.
Since Organizr uses HS256 signature algorithm, which is a symmetric algorithm, the same secret is used to both by Organizr to sign the token, and by your web server to validate it. It is therefore important that you keep this secret safe, otherwise it may be used to forge tokens and authenticate to your server!
This requires the following 2 pieces of information:
- The name of the cookie to use to extract the token from. This value is dynamic, of the form
<uuid>is your Organizr instance's
- The secret to use to validate the token signature, which is your Organizr instance's
Both these values can be taken from your Organizr server's
www/Dashboard/api/config/config.phpafter initial setup.
On Linux, you may use the following commands to parse them:
cat /config/www/Dashboard/api/config/config.php | grep organizrHash | sed -r 's/.*=>[^[:alnum:]]*([[:alnum:]]*).*/\1/'
cat /config/www/Dashboard/api/config/config.php | grep uuid | sed -r 's/.*=>[^[:alnum:]]*([[:alnum:]-]*).*/\1/'