This commit is contained in:
Wolfgang Ludger Hottgenroth 2024-02-15 09:50:58 +01:00
commit 0a56008ec3
Signed by: wn
GPG Key ID: E49AF3B9EF6DD469
4 changed files with 92 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.env
*~
.*~

4
env-template Normal file
View File

@ -0,0 +1,4 @@
AUTH0_CLIENT_ID=
AUTH0_CLIENT_SECRET=
AUTH0_DOMAIN=
APP_SECRET_KEY=

69
server.py Normal file
View File

@ -0,0 +1,69 @@
import json
from os import environ as env
from urllib.parse import quote_plus, urlencode
from authlib.integrations.flask_client import OAuth
from authlib.oidc.core import CodeIDToken
from authlib.jose import jwt
from dotenv import find_dotenv, load_dotenv
from flask import Flask, redirect, render_template, session, url_for
ENV_FILE = find_dotenv()
if ENV_FILE:
load_dotenv(ENV_FILE)
app = Flask(__name__)
app.secret_key = env.get("APP_SECRET_KEY")
oauth = OAuth(app)
oauth.register(
"auth0",
client_id=env.get("AUTH0_CLIENT_ID"),
client_secret=env.get("AUTH0_CLIENT_SECRET"),
client_kwargs={
"scope": "openid profile email",
},
server_metadata_url=f'https://{env.get("AUTH0_DOMAIN")}/.well-known/openid-configuration'
)
@app.route("/login")
def login():
return oauth.auth0.authorize_redirect(
redirect_uri=url_for("callback", _external=True)
)
@app.route("/callback", methods=["GET", "POST"])
def callback():
token = oauth.auth0.authorize_access_token()
session["user"] = token
claims = jwt.decode(token['id_token'], keys, claims_cls=CodeIDToken)
claims.validate()
print(json.dumps(claims))
return redirect("/")
@app.route("/logout")
def logout():
session.clear()
return redirect(
"https://" + env.get("AUTH0_DOMAIN")
+ "/v2/logout?"
+ urlencode(
{
"returnTo": url_for("home", _external=True),
"client_id": env.get("AUTH0_CLIENT_ID"),
},
quote_via=quote_plus,
)
)
@app.route("/")
def home():
return render_template("home.html", session=session.get('user'), pretty=json.dumps(session.get('user'), indent=4))
if __name__ == "__main__":
app.run(host="0.0.0.0", port=env.get("PORT", 3000))

16
templates/home.html Normal file
View File

@ -0,0 +1,16 @@
<html>
<head>
<meta charset="utf-8" />
<title>Auth0 Example</title>
</head>
<body>
{% if session %}
<h1>Welcome {{session.userinfo.name}}!</h1>
<p><a href="/logout">Logout</a></p>
<div><pre>{{pretty}}</pre></div>
{% else %}
<h1>Welcome Guest</h1>
<p><a href="/login">Login</a></p>
{% endif %}
</body>
</html>