You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.8 KiB">


A simple middleware to authenticate users using API Key


  • the function to check the validity of API Key should be provided and not part of this middleware.


Middleware & options

Use wrap-api-key-auth-fn to create an instance of the middleware, wrap your routes with it:

(defn get-auth-from-api-key [token]
    (when (= token "secret-api-key")
      {:user {:id "user-01" :name "username"}
       :groups #{{:id "cisco" :name "Cisco"}}
       :roles #{:admin :user}
       :auth-type :api-key}))

(def app
     ((wrap-api-key-auth-fn get-auth-from-api-key) handler))

When configured like this all requests with the header:

Authorization: apiKey secret-api-key

will be modified to be passed to the handler with the new key `:api-key-info` containing:

{:user {:id "user-01" :name "username"}
 :groups #{{:id "cisco" :name "Cisco"}}
 :roles #{:admin :user}
 :auth-type :api-key}

If the header contain an Authorization header with an unknown `api-key` the request will be rejected with a 403.

Authorization: apiKey unknown-api-key

If the header contain something with another authorization kind or no authorization header like:

Authorization: Bearer something-else

Then the request will be passed to the handler without any `api-key-info`. This provide the ability for other authentication middleware to be used. Deciding what to do about authenticated or non-authenticated user is left for another middleware or to be handled by the app handler.


Copyright © 2015-2017 Cisco Systems Eclipse Public License v1.0