Authentication
Authentication is activated in Reaper by default. It relies on Apache Shiro, which allows to store users and password in files, databases or connect through LDAP and Active Directory out of the box. The default authentication uses the dummy username and password as found in the default shiro.ini. It is expected you override this in a production environment.
This default Shiro authentication configuration is referenced via the following block in the Reaper yaml file :
accessControl:
sessionTimeout: PT10M
shiro:
iniConfigs: ["classpath:shiro.ini"]
Default settings
As of Reaper 1.4.0, authentication is enabled by default and credentials are:
- Username: admin
- Password: admin
With clear passwords
Copy the default shiro.ini
file and adapt it overriding the “users” section :
…
[users]
user1 = password1
user2 = password2
…
If you use a container, make sure you set the environment variable REAPER_SHIRO_INI
to a valid path inside the container otherwise your custom shiro.ini will not be used.
With encrypted passwords
Based on Shiro’s document on Encrypting passwords :
[main]
authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter
authc.loginUrl = /webui/login.html
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
iniRealm.credentialsMatcher = $sha256Matcher
filterChainResolver.globalFilters = null
[users]
john = 807A09440428C0A8AEF58BD3ECE32938B0D76E638119E47619756F5C2C20FF3A
…
To generate a password, you case use for example :
- From the command line :
echo -n "Hello World" | shasum -a 256
echo -n "Hello World" | sha256sum
- Or some language of your choice (like Python here) :
import hashlib
hash_object = hashlib.sha256(b'Hello World')
hex_dig = hash_object.hexdigest()
print(hex_dig)
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
With LDAP accounts
Based on Shiro’s LDAP realm usage.
An example configuration for LDAP authentication exists (commented out) in the default shiro.ini :
# Example LDAP realm, see https://shiro.apache.org/static/1.2.4/apidocs/org/apache/shiro/realm/ldap/JndiLdapContextFactory.html
ldapRealm = org.apache.shiro.realm.ldap.JndiLdapRealm
ldapRealm.userDnTemplate = uid={0},ou=users,dc=cassandra-reaper,dc=io
ldapRealm.contextFactory.url = ldap://ldapHost:389
;ldapRealm.contextFactory.authenticationMechanism = DIGEST-MD5
;ldapRealm.contextFactory.systemUsername = cn=Manager, dc=example, dc=com
;ldapRealm.contextFactory.systemPassword = secret
;ldapRealm.contextFactory.environment[java.naming.security.credentials] = ldap_password
Accessing Reaper via the command line spreaper
In order to interact with Reaper through spreaper
when Shiro authentication is activated, you will first need to login as follows:
$ ./spreaper login admin
Password: *****
# Logging in...
You are now authenticated to Reaper.
# JWT saved
The JWT will be saved in ~/.reaper/jwt
and automatically used by Reaper for any other call.
Pre-existing tokens can be passed to spreaper using --jwt <token>
with any call.
Accessing Reaper via the REST API
The RESTful endpoints to Reaper can also be authenticated using JWT (Java Web Token).
A token can be generated from the /jwt
url by passing the Session ID cookie retrieved from the /login
endpoint.
Logging in through /login
is described in the REST Api page.