# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Forked from https://gist.github.com/thomasdarimont/145dc9aa857b831ff2eff221b79d179a # # Credits: https://gist.github.com/thomasdarimont # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Adapted the original code to Python3 import json import logging from flask import Flask, g from flask_oidc import OpenIDConnect import requests logging.basicConfig(level=logging.DEBUG) app = Flask(__name__) app.config.update({ 'SECRET_KEY': 'SomethingNotEntirelySecret', 'TESTING': True, 'DEBUG': True, 'OIDC_CLIENT_SECRETS': 'client_secrets.json', 'OIDC_ID_TOKEN_COOKIE_SECURE': False, 'OIDC_REQUIRE_VERIFIED_EMAIL': False, 'OIDC_USER_INFO_ENABLED': True, 'OIDC_OPENID_REALM': 'flask-demo', 'OIDC_SCOPES': ['openid', 'email', 'profile'], 'OIDC_INTROSPECTION_AUTH_METHOD': 'client_secret_post' }) oidc = OpenIDConnect(app) @app.route('/') def hello_world(): if oidc.user_loggedin: return ('Hello, %s, See private ' 'Log out') % \ oidc.user_getfield('preferred_username') else: return 'Welcome anonymous, Log in' @app.route('/private') @oidc.require_login def hello_me(): """Example for protected endpoint that extracts private information from the OpenID Connect id_token. Uses the accompanied access_token to access a backend service. """ info = oidc.user_getinfo(['preferred_username', 'email', 'sub']) username = info.get('preferred_username') email = info.get('email') user_id = info.get('sub') if user_id in oidc.credentials_store: try: from oauth2client.client import OAuth2Credentials access_token = OAuth2Credentials.from_json(oidc.credentials_store[user_id]).access_token print('access_token=<%s>' % access_token) headers = {'Authorization': 'Bearer %s' % (access_token)} # YOLO greeting = requests.get('http://localhost:8080/greeting', headers=headers).text except: print("Could not access greeting-service") greeting = "Hello %s" % username return ("""%s your email is %s and your user_id is %s! """ % (greeting, email, user_id)) @app.route('/api', methods=['POST']) @oidc.accept_token(require_token=True, scopes_required=['openid']) def hello_api(): """OAuth 2.0 protected API endpoint accessible via AccessToken""" return json.dumps({'hello': 'Welcome %s' % g.oidc_token_info['sub']}) @app.route('/logout') def logout(): """Performs local logout by removing the session cookie.""" oidc.logout() return 'Hi, you have been logged out! Return' if __name__ == '__main__': app.run()