initial
This commit is contained in:
commit
0a56008ec3
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.env
|
||||
*~
|
||||
.*~
|
4
env-template
Normal file
4
env-template
Normal file
@ -0,0 +1,4 @@
|
||||
AUTH0_CLIENT_ID=
|
||||
AUTH0_CLIENT_SECRET=
|
||||
AUTH0_DOMAIN=
|
||||
APP_SECRET_KEY=
|
69
server.py
Normal file
69
server.py
Normal 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
16
templates/home.html
Normal 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>
|
Loading…
x
Reference in New Issue
Block a user