Anonymonkey is an attempt at creating an anonymous survey mechanism.
Surveyors hosts their questions on a web service which allows users belonging
to a panel to answer anonymously.
This system relies on an external survey authority where members of the panel
can exchange a mail-transmitted JWT token with another token containing no
identity information. JWT are used to make a public-key based assertion
of the grant of the survey authority to answer the survey.
Survey edition uses the react-surveys
library UI and survey format.
Survey service API documentation is available at docs.anonymonkey.apiary.io.
Survey authority API documentation can be found at docs.anonymonkeyauthority.apiary.io.
- Survey creation, with a reactive edition UI
- Survey sharing via email
- Anonymity based on the JWT payload disclosure
- Survey answers reporting
- REST APIs for survey edition, answering and reporting
- Dynamic discovery of survey authorities
- OpenID Connect authentication
Anonymonkey uses MongoDB as a datastore for survey, answers and token blacklist.
Redis is used for temporary data storage and discovery data caching.
Since Anonymonkey authenticates users through OpenID Connect and JWTs, an OpenID
Connect compliant authentication server is needed for it to run properly.
A survey authority web service needs to be hosted in order for Anonymonkey
to work. Setup instructions can be found on
Email sending is handled by Mailgun. Mailgun allows to send emails reliably without the use of a SMTP server.
Configuration and setup
Anonymonkey is hosted on anonymonkey.caille.me,
alongside with the authority service on
docker-compose.yml file is present in the repository, allowing the
whole service to be started on a local machine using
Anonymonkey service is exposed to the Docker host on port
authority service on port
If you're running Docker Toolbox
on OSX or Windows instead of running Docker on Linux directly, you should
Configuration files for the two services are to be found in the
Anonymonkey service configuration is stored in the
Before going into production, you must change the sample settings by
providing values for the variables below.
||Should the application be in debug mode. Set this to False in production|
||Random characters string used to cryptographically sign important information such as cookies and JWTs|
||MongoDB database name|
||MongoDB server hostname|
||MongoDB server port|
||Redis server hostname|
||Redis server port|
||OpenID Connect OAuth client ID|
||OpenID Connect OAuth secret|
||OpenID Connect redirect_uri. Must point to /login_return|
||OpenID Connect authorization URL|
||OpenID Connect token endpoint|
||OpenID Connect UserInfo endpoint|
||OpenID server public key used to sign JWT assertions|
||JWT issuer claim of OpenID Connect server|
||JWT issuer used in survey registration tokens|
||Private RSA key used to sign JWTs|
||Public RSA key used to sign JWTs|
Python and Gunicorn are used to host the backend service. Node.js and Gulp are
required to compile static assets.
These commands assume you have active MongoDB and Redis server listening on
git clone https://github.com/hugoatease/anonymonkey.git cd anonymonkey virtualenv env source env/bin/activate pip install -r requirements.txt pip install gunicorn npm install -g gulp npm install gulp gunicorn anonymonkey:app
© 2016 Hugo Caille & Aymeric Masse.
Anonymonkey is released upon the terms of the Apache 2.0 License.