Как получить токен после входа в keycloak с помощью python-keycloak

#python #flask #oauth #keycloak

#python #flask #oauth #keycloak

Вопрос:

Я использую flask для создания приложения и keycloak для авторизации.

 from flask import Flask, session, request
from keycloak import KeycloakOpenID

app = Flask(__name__)
app.secret_key = 's_k'


keycloak_open_id =  KeycloakOpenID(server_url="http://localhost:8080/auth/",
                        client_id="Centrum",
                        realm_name="myrealm",
                        client_secret_key="c_k")

def login_required(func):
    @wraps(func)
    def decorated(*args, **kwargs):

    // validate token

        return func('2', *args, **kwargs)
    return decorated


@app.route('/login')
def login():
    url = keycloak_open_id.auth_url('http://localhost:5555/auth')

    # how to get a token and assign it to session['token']?

    return redirect(url, code=302)

@app.route('/home')
@login_required
def home():
    return 'Base URL!'
  

Когда я вошел в систему и могу перейти в / home, но без токена, приложению всегда нужно пройти через метод keycloak. Есть ли какая-либо другая возможность получить токен, кроме создания собственной формы входа и передачи логина и пароля в метод keycloak_open_id.token(login, password)?

Ответ №1:

Кажется, вы ищете grant_type=password поток oauth, вы можете проверить документ keycloak о том, как это сделать.

В основном:

 curl 
  -d "client_id=myclient" 
  -d "client_secret=40cc097b-2a57-4c17-b36a-8fdf3fc2d578" 
  -d "username=user" 
  -d "password=password" 
  -d "grant_type=password" 
  "http://localhost:8080/auth/realms/master/protocol/openid-connect/token"
  

Комментарии:

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