that is what I exactly want!!

for now I am using openid-connect to solve Auth problem(Eg: hide
APISIX dashboard), but basic auth is enough in some scenarios.

Kowloon Zh <kowloo...@gmail.com> 于2020年1月5日周日 下午10:42写道:
>
> Hi folks,
>
> The most commonly used HTTP authentication scheme is HTTP Basic
> authentication.
>
> I want to add a basic auth plugin to apisix apache, It should have the
> following functions:
>
> 1. API for users to dynamically add and query basic authorization
> information.
>
> function _M.api()
>     return {
>         {
>             methods = { "GET" },
>             uri = "/apisix/plugin/basic-auth/get",
>             handler = get_auth,
>         },
>         {
>             methods = { "POST", "PUT" },
>             uri = "/apisix/plugin/basic-auth/set",
>             handler = set_auth,
>         }
>     }
> end
>
> 2. Verify basic authrization during the access phase.
>
> function _M.access(conf, ctx)
>     core.log.info("plugin access phase, conf: ", core.json.delay_encode(conf))
>
>     -- 0. check conf enable
>     if not conf.enable then
>         return
>     end
>
>     -- 1. extract username and password from basic_auth header
>     local headers = ngx.req.get_headers()
>     if not headers.Authorization then
>         return 401, { message = "authorization is required" }
>     end
>
>     local username, password, err = extract_auth_header(headers.Authorization)
>     if err then
>         return 401, { message = err }
>     end
>
>     -- 2. get user info from etcd
>     local res = authorizations_etcd:get(username)
>     if res == nil then
>         return 401, { message = "failed to find authorization from etcd" }
>     end
>
>     -- 3. check if user exists
>     if not res.value or not res.value.id then
>         return 401, { message = "user is not found" }
>     end
>
>     local value = res.value
>
>     -- 4. check if password correct
>     if value.password ~= password then
>         return 401, { message = "password is error" }
>     end
> end
>
>
> Can anyone give some advice? Is this is needed for your scenarios?

Reply via email to