diff --git a/src/main/java/caosdb/server/accessControl/AnonymousAuthenticationToken.java b/src/main/java/caosdb/server/accessControl/AnonymousAuthenticationToken.java
new file mode 100644
index 0000000000000000000000000000000000000000..6453df2486756be84b0fafc92a634a6b2a261753
--- /dev/null
+++ b/src/main/java/caosdb/server/accessControl/AnonymousAuthenticationToken.java
@@ -0,0 +1,33 @@
+package caosdb.server.accessControl;
+
+import org.apache.shiro.authc.AuthenticationToken;
+
+public class AnonymousAuthenticationToken implements AuthenticationToken {
+  
+  private static final long serialVersionUID = 1424325396819592888L;
+  private static final AnonymousAuthenticationToken INSTANCE = new AnonymousAuthenticationToken();
+  public static final Object PRINCIPAL = new Object();
+
+  private AnonymousAuthenticationToken() {
+  }
+  
+  public static AnonymousAuthenticationToken getInstance(){
+    return INSTANCE;
+  }
+
+  @Override
+  public Object getPrincipal() {
+    return PRINCIPAL;
+  }
+
+  @Override
+  public Object getCredentials() {
+    return null;
+  }
+  
+  @Override
+  public boolean equals(Object obj) {
+    return obj == this;
+  }
+
+}
diff --git a/src/main/java/caosdb/server/accessControl/AnonymousRealm.java b/src/main/java/caosdb/server/accessControl/AnonymousRealm.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e42b76fb8a43fc96b20c5b0239adc1d180f1c72
--- /dev/null
+++ b/src/main/java/caosdb/server/accessControl/AnonymousRealm.java
@@ -0,0 +1,23 @@
+package caosdb.server.accessControl;
+
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authc.credential.AllowAllCredentialsMatcher;
+import org.apache.shiro.realm.AuthenticatingRealm;
+
+public class AnonymousRealm extends AuthenticatingRealm {
+
+  @Override
+  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
+    return new SimpleAuthenticationInfo(token.getPrincipal(), null, getName());
+  }
+  
+  public AnonymousRealm() {
+    setAuthenticationTokenClass(AnonymousAuthenticationToken.class);
+    setCredentialsMatcher(new AllowAllCredentialsMatcher());
+    setCachingEnabled(false);
+    setAuthenticationCachingEnabled(false);
+  }
+
+}