Как перенаправить обратно на домашнюю страницу после аутентификации

Я пытаюсь настроить lua-resty-openidc на сервере NGINX. Как я могу перенаправить обратно на домашнюю страницу после аутентификации пользователя? Когда пользователь аутентифицирован, URL-адрес обратного вызова получает код, session_state и другие параметры с сервера. Это вызывает проблему с загрузкой после аутентификации пользователя. URL-адрес, на который возвращается пользователь, выглядит примерно так: http://xyz.abc.com:8080/secured?code=32edkew2kjjjdf

https://github.com/pingidentity/lua-resty-openidc

Моя конфигурация выглядит следующим образом. Я хотел вернуть пользователя обратно в http://xyz.abc.com:8080. Каким должен быть redirect_uri?

 local opts = {
             -- the full redirect URI must be protected by this script and becomes:
             -- ngx.var.scheme.."://"..ngx.var.http_host..opts.redirect_uri_path
             redirect_uri_path = "/secured", 
             discovery = "https://accounts.google.com/.well-known/openid-configuration",
             client_id = "<client_id",
             client_secret = "<client_secret"
             --authorization_params = { hd="pingidentity.com" },
             --scope = "openid email profile",
             --iat_slack = 600,
          }

person Venkatesh Marepalli    schedule 21.03.2017    source источник


Ответы (3)


lua-resty-openidc сам обрабатывает перенаправление обратно на исходную страницу, к которой вы пытались получить доступ. Вам не нужно делать ничего конкретного для этого, он определит этот URL-адрес при запуске аутентификации, см.: https://github.com/pingidentity/lua-resty-openidc/blob/master/lib/resty/openidc.lua#L539 и сохраните его в сеансе.

Он перехватит перенаправление обратно на URI перенаправления, см.: https://github.com/pingidentity/lua-resty-openidc/blob/master/lib/resty/openidc.lua#L557 и в конечном итоге перенаправить обратно на исходный URL-адрес, см. https://github.com/pingidentity/lua-resty-openidc/blob/master/lib/resty/openidc.lua#L350

Сам URI перенаправления может быть любым путем, если ему не нужно обслуживать контент, поскольку lua-resty-openidc перехватит его и сделает свое дело. Он должен быть зарегистрирован у провайдера.

person Hans Z.    schedule 23.03.2017
comment
См. эту проблему, которую я разместил на github.com/pingidentity/lua-resty-openidc/ вопросы/43 - person Venkatesh Marepalli; 23.03.2017
comment
Похоже, есть проблема с переменными сеанса. Когда я заменил return ngx.redirect(session.data.original_url) with return ngx.redirect("/"), он работает, как и ожидалось, перенаправляя на домашнюю страницу. Я подозреваю, что есть проблема с переменными сеанса в openidc.lua. Каждый раз, когда я отправляю новый запрос из нового сеанса браузера, я подозреваю, что он все еще учитывает старые значения. Он работает, как и ожидалось, при каждой альтернативной попытке без вышеуказанного изменения. - person Venkatesh Marepalli; 25.03.2017

Перенаправление определяется параметром redirect_uri_path. Вы указали /secured в этом поле, поэтому вы получаете перенаправление на http://xyz.abc.com:8080/secured?.... Если вы хотите перенаправить на /, вы можете указать redirect_uri_path = "/" в своих опциях.

Но это может быть не лучшим решением, так как вы, вероятно, захотите выполнить некоторую обработку перед перенаправлением на домашнюю страницу. Следующая часть nginx.conf может решить вашу проблему:

location "=/secured" {
  access_by_lua_block {
    ... -- perform some handling
    return ngx.redirect "/"
  }
}

Этот блок location определен для пути /secured. Это позволяет выполнить некоторый код перед перенаправлением на домашнюю страницу (путь "/").

person Alban Linard    schedule 22.03.2017

Попробуйте этот модуль — github.com/tarachandverma/nginx-openidc Этот модуль очень легко настроить с синтаксисом xml и обеспечивает расширенную поддержку перенаправлений в простой конфигурации xml, которую можно обновлять без перезапуска веб-сервера nginx.

person Tara Chand Verma    schedule 25.12.2017