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

Я пытаюсь настроить 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,
          }

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 будет перехватывать его и делать свое дело. Это необходимо зарегистрировать у провайдера.

Перенаправление определяется 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 дорожка. Это позволяет выполнить некоторый код перед перенаправлением на домашнюю страницу (путь "/").

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

Другие вопросы по тегам