Сессия Python Flask: новая сессия для каждого запроса HTTPS - PullRequest
0 голосов
/ 06 марта 2019

Я интегрирую свое веб-приложение с одним логином. Впервые, когда пользователь попадает на мою домашнюю страницу, я перенаправляю на один логин, и любое последующее перенаправление основывается либо на наличии сеанса, либо на нем нет.

Для каждого нового запроса проверка сеанса кажется пустой, и она продолжает идти к onelogin в цикле.

Примечание: все работает в моей локальной среде, так как это только HTTP-запрос. При развертывании в среде разработки AWS возникает проблема зацикливания на одном входе. Еще один момент после того, как он зацикливается на минуту или около того, затем внезапно страница, на которую должно произойти перенаправление, появляется немедленно.

Пролить немного света, чтобы выйти из этой проблемы. Дайте мне знать, если мне не хватает какой-либо информации для понимания этой проблемы.

PFB код ниже.

`

from flask_sslify import SSLify
application = Flask(__name__)
sslify = SSLify(application)

@app.before_request
def before_request():    
    if request.endpoint !='main' and  'samlNameId' not in session:
        req = prepare_flask_request(request)
        auth = init_saml_auth(req)    
        return redirect(auth.login())

@app.route('/', methods='GET,POST')
def main():
    return index()

@app.route('/requestAccess', methods='GET,POST')
def request_access():    
    return render_template('request-access-form.html', apis=_apis, email_to=email_to)


def index():
    req = prepare_flask_request(request)
    auth = init_saml_auth(req)

    try:

        if 'slo' in request.args:
            name_id = None
            session_index = None
            if 'samlNameId' in session:
                name_id = session['samlNameId']
            if 'samlSessionIndex' in session:
                session_index = session['samlSessionIndex']
            return redirect(auth.logout(name_id=name_id, session_index=session_index))
        elif 'acs' in request.args:            
            auth.process_response()
            errors = auth.get_errors()
            if len(errors) == 0:
                session['samlUserdata'] = auth.get_attributes()
                session['samlNameId'] = auth.get_nameid()
                session['samlSessionIndex'] = auth.get_session_index()               
                self_url = OneLogin_Saml2_Utils.get_self_url(req)                
                if 'RelayState' in request.form and self_url +"/" != request.form['RelayState']:
                    return redirect(auth.redirect_to(request.form['RelayState']))
                return render_template('index.html')
            else:
                logger.error("Onelogin?acs returned with the following errors : " + ','.join(errors))
        elif 'sls' in request.args:
            logger.info("User with name %s and sessionIndex %s logged out successfully", session['samlNameId'],session['samlSessionIndex'])
            dscb = lambda: session.clear()
            url = auth.process_slo(delete_session_cb=dscb)
            errors = auth.get_errors()
            if len(errors) == 0:
                if url is not None:
                    logger.info("Url returned from Onelogin ? sls" + url)
                    return redirect(url)

    except Exception as e:
        logger.error(e)
        return redirect(auth.login())

    return redirect(auth.login())

def init_saml_auth(req):
    auth = OneLogin_Saml2_Auth(req, custom_base_path=app.config['SAML_PATH'])
    return auth


def prepare_flask_request(request):
    # If server is behind proxys or balancers use the HTTP_X_FORWARDED fields
    url_data = urlparse(request.url)    
    prepared = {
        'https': 'on' ,
        'http_host': request.host,
        'script_name': request.path,
        'get_data': request.args.copy(),        
        'post_data': request.form.copy()
    }
    if url_data.port is not None:
        prepared['server_port'] = url_data.port

    return prepared

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...