Как я могу отменить связь между действиями в Google и Auth0 - PullRequest
0 голосов
/ 29 мая 2018

Я использую Actions on Google (на мобильном телефоне Google Assistant) и используя его Account Linking Я вошел в систему Auth0 ( Окно входа в систему : image ).

Однако я хочу выйти из Auth0 всякий раз, когда захочу, чтобы я мог протестировать всю процедуру с самого начала.

Я написал следующееисходный код в Python и Flask в соответствии с Auth0 документами (https://auth0.com/docs/logout).

from flask import Flask, render_template, request, jsonify
import requests

app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def index():

    session['user'] = 'Poete_Maudit'

    data = request.get_json()

    if data is not None:
        action = data["queryResult"]["action"]
    else:
        return 'HERE'

    # Triggers actions.intent.SIGN_IN which leads to Auth0
    if (action == 'sign'):

        return jsonify({"payload": {
                    "google": {
                        "expectUserResponse": True,
                        "isSsml": False,
                        "noInputPrompts": [],
                        "systemIntent": {
                            "data": {
                                "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
                            },
                            "intent": "actions.intent.SIGN_IN"
                        }
                      }
                     }
                    })
    # I have other if statements below which retrieve the access token 
    # and do in general other stuff on Actions on Google app
    # but it is too long to include it here

@app.route('/logout')
def logout():
    session.clear()
    return redirect('https://project_id.eu.auth0.com/v2/logout?returnTo=http://127.0.0.1:5000')

if __name__== "__main__":
    app.secret_key = os.urandom(24)
    app.run(debug=True)

После того, как я выполнил всю процедуру входа в систему один раз, затем я вручную ухожу (из браузера)на http://127.0.0.1:5000/logout, который успешно перенаправляет меня на http://127.0.0.1:5000. На консоли python я получаю:

127.0.0.1 - - [06/Jun/2018 14:09:04] "GET /logout HTTP/1.1" 302 -
127.0.0.1 - - [12/Jun/2018 11:03:16] "GET / HTTP/1.1" 200 -

и в разделе Auth0 logs я получаю Success Logout ( image ).

Однако снова при перезапуске всего процесса на мобильном телефоне Google Assistant окно входа в систему не появляется, и я снова уже вошел в системуAuth0 с тем же accessToken.

Как правильно выйти из системы, очистив сеанс и / или файлы cookie на http://127.0.0.1:5000 иследовательно, заставьте Auth0 окно входа в систему появиться снова?

PS

1) Имейте в виду, пожалуйста, что сейчас я делаю все этос Python и ngrok.Если я перезапущу сеанс ngrok, то снова появится окно входа в систему, но, очевидно, я хочу сделать это программно.

2) Не принимайте что-либо как должное, пожалуйста.Я могу упустить что-то очень элементарное в том, что я делаю, поэтому, пожалуйста, не стесняйтесь задавать мне даже очень элементарные вопросы по этому поводу.

Ответы [ 2 ]

0 голосов
/ 18 июня 2018

Я отправил сообщение об этом в службу поддержки Google и получил следующий ответ:

Чтобы отменить привязку вашей учетной записи, вы можете воспользоваться этой ссылкой (https://gala -demo.appspot.com ), в поле Service ID введите идентификатор проекта и добавьте «_dev» в конце (в вашем случае это будет «Dnipro-Chatbot_dev»), затем нажмите «Отключить мои учетные записи».

Более того, я спросил их, могу ли я сделать это программно (а не только вручную, как указано выше), и получил следующий ответ:

Я не уверен, возможно ли это сделать в Python,но вы можете попробовать следующее: Если вы можете отправить обратно код состояния 401 с вашей конечной точки обмена токенами oauth.401 сообщит AoG, что токен доступа недействителен, и заставит AoG снова инициировать поток привязки учетной записи.Надеюсь, что это может помочь вам.

В заключение, вы, конечно, можете использовать ссылку выше, чтобы отменить связь учетной записи, как я ее проверил, и она отлично работает.Что касается второго ответа, я не уверен, что это точно возможно, по крайней мере, так, как указано.Вы не можете программно отправить код состояния 401 из Auth0.Что вы можете сделать в Auth0, так это установить очень низкое время истечения JWT вашего приложения Auth0 (например, 60 секунд) и таким образом принудительно отозвать токен доступа.Но это опять-таки не программное решение, и я еще не тестировал его.

0 голосов
/ 30 мая 2018

Конечная точка /v2/logout в Auth0 предназначена для использования из переднего канала (т. Е. Из браузера), поэтому ваше бэкэнд-приложение должно возвращать ответ перенаправления 302, указывающий на конечную точку /v2/logout (вы можете использоватьreturnTo параметр, как описано в документации, если вы хотите перенаправить пользователя обратно на определенный URL-адрес после очистки сеанса).

Путем запроса обратного канала, как вы делаете сейчас (сервер-сервер)) cookie сеанса отсутствует, поэтому Auth0 не знает, какой сеанс завершить.

Обратите также внимание, что конечная точка /v2/logout очищает сеанс в Auth0 , но вам также придется очиститьсеанс в вашем приложении, а также.Если вы используете Flask, взгляните на эти примеры Flask session.clear .

...