diff --git a/src/nss.rs b/src/nss.rs
index dc66ed265c8eb5cfe1d06a8cf9a34b2b8b059717..e866eb40cdd6185e35507bcdc008b2efbbfaa4cb 100644
--- a/src/nss.rs
+++ b/src/nss.rs
@@ -18,9 +18,13 @@ use crate::config::{
     get_optional
 };
 use config::Config;
+use crate::cache::get_cache;
 
 use crate::logging::setup_log;
 
+use libc::{getpwuid, geteuid};
+use std::ffi::CStr;
+
 use libnss::interop::Response;
 use libnss::passwd::{PasswdHooks, Passwd};
 
@@ -36,12 +40,28 @@ fn nss_hook_prepare() -> Config {
     return conf;
 }
 
+fn get_current_user() -> String {
+    let euid;
+    let euser;
+    unsafe {
+        euid = geteuid();
+        euser = CStr::from_ptr((*getpwuid(euid)).pw_name);
+    };
+    euser.to_str().ok().unwrap().to_string()
+}
+
 struct OidcPasswd;
 
 impl PasswdHooks for OidcPasswd {
     fn get_all_entries() -> Response<Vec<Passwd>> {
         let config = nss_hook_prepare();
 
+        let user = get_current_user();
+        let token = match get_cache().load_user_token(&user) {
+            Some(t) => t,
+            None => return Response::Unavail
+        };
+
         Response::Success(
             vec![
                 Passwd {