Add token refresh
This commit is contained in:
@@ -111,11 +111,13 @@ spec:
|
||||
- 'https://inventory-app-72zn4.codemowers.ee/login-callback'
|
||||
grantTypes:
|
||||
- 'authorization_code'
|
||||
- 'refresh_token'
|
||||
responseTypes:
|
||||
- 'code'
|
||||
availableScopes:
|
||||
- 'openid'
|
||||
- 'profile'
|
||||
- 'offline_access'
|
||||
tokenEndpointAuthMethod: 'client_secret_basic'
|
||||
pkce: false
|
||||
|
||||
|
@@ -45,6 +45,11 @@ def add_url_params(url, params):
|
||||
req.prepare_url(url, params)
|
||||
return req.url
|
||||
|
||||
def add_session_tokens(session, r):
|
||||
session["access_token"] = r["access_token"]
|
||||
session["id_token"] = r["id_token"]
|
||||
session["refresh_token"] = r["refresh_token"]
|
||||
|
||||
@page_oidc.route('/login-callback')
|
||||
def login_callback():
|
||||
r = requests.post(metadata["token_endpoint"], {
|
||||
@@ -59,11 +64,26 @@ def login_callback():
|
||||
if not validate_id_token(r["id_token"]) or not read_user(r["access_token"]):
|
||||
return "tokens validation failed", 500
|
||||
|
||||
session["id_token"] = r["id_token"]
|
||||
session["access_token"] = r["access_token"]
|
||||
add_session_tokens(session, r)
|
||||
print("authenticated, stored url was: " + session.get("original_url"))
|
||||
return redirect(session.pop("original_url", "/"))
|
||||
|
||||
def do_refresh():
|
||||
print("doing refreesh")
|
||||
r = requests.post(metadata["token_endpoint"], {
|
||||
"client_secret": os.getenv("OIDC_CLIENT_SECRET"),
|
||||
"grant_type": "refresh_token",
|
||||
"refresh_token": session["refresh_token"],
|
||||
"scope": os.getenv("OIDC_AVAILABLE_SCOPES").replace(",", " "),
|
||||
})
|
||||
if r.status_code == 200:
|
||||
add_session_tokens(session, r.json())
|
||||
print("token refresh success")
|
||||
return True
|
||||
else:
|
||||
print("token refresh failed")
|
||||
return False
|
||||
|
||||
@page_oidc.route("/logout")
|
||||
def logout():
|
||||
token = session.pop("access_token", "asdf")
|
||||
@@ -87,6 +107,13 @@ def read_user(token=None):
|
||||
})
|
||||
if r.status_code == 200:
|
||||
return r.json()
|
||||
elif r.status_code == 401 and do_refresh():
|
||||
token = session.get("access_token", False)
|
||||
r = requests.get(url = metadata["userinfo_endpoint"], headers = {
|
||||
"Authorization": "Bearer " + token
|
||||
})
|
||||
if r.status_code == 200:
|
||||
return r.json()
|
||||
else:
|
||||
return False
|
||||
|
||||
|
Reference in New Issue
Block a user