Skip to main content

Flask OpenID with flask-login

Project description

flask-login-oidc

Flask OpenID with flask-login

Installation

pip install flask-login-oidc

Setup

  • Base login configuration
import flask

from flask_login import LoginManager, login_required, current_user
from flask_login_oidc import FlaskOIDC

app = flask.Flask('flask')
oidc = FlaskOIDC()


def redirect_login():
    return flask.redirect(flask.url_for('oidc.login'))


@app.route('/oidc/login/', endpoint='oidc.login', methods=['GET'])
def login():
    return oidc.login()


@app.route('/oidc/authorize/', endpoint='oidc.authorize', methods=['GET'])
def authorize():
    return oidc.authorize()


@app.route('/oidc/logout/', endpoint='oidc.logout', methods=['GET'])
@login_required
def logout():
    return oidc.logout()


@app.route('/', methods=['GET'])
@login_required
def index():
    return current_user.email


if __name__ == '__main__':
    lm = LoginManager(app)
    lm.unauthorized_handler(redirect_login)
    lm.user_loader(oidc.user)
    app.config['OIDC_CLIENT_SECRETS'] = 'secrets.json'
    app.config['OIDC_OPENID_REALM'] = 'realm'
    app.config['SECRET_KEY'] = 'secret'
    app.config['SESSION_TYPE'] = 'filesystem'
    oidc.init_app(app)
    app.run()
  • Custom login configuration
import flask

from flask_login import LoginManager, login_required, current_user
from flask_login_oidc import FlaskOIDC

app = flask.Flask('flask')
oidc = FlaskOIDC(prefix='SSO')


def redirect_login():
    return flask.redirect(flask.url_for('sso.login'))


@app.route('/sso/login/', endpoint='sso.login', methods=['GET'])
def login():
    return oidc.login()


@app.route('/sso/authorize/', endpoint='sso.authorize', methods=['GET'])
def authorize():
    return oidc.authorize()


@app.route('/sso/logout/', endpoint='sso.logout', methods=['GET'])
@login_required
def logout():
    return oidc.logout()


@app.route('/', methods=['GET'])
@login_required
def index():
    return current_user.email


if __name__ == '__main__':
    lm = LoginManager(app)
    lm.unauthorized_handler(redirect_login)
    lm.user_loader(oidc.user)
    app.config['SSO_CLIENT_SECRETS'] = 'secrets.json'
    app.config['SSO_OPENID_REALM'] = 'realm'
    app.config['SECRET_KEY'] = 'secret'
    app.config['SESSION_TYPE'] = 'filesystem'
    oidc.init_app(app)
    app.run()

Using custom user model

Must be used after FlaskOIDC.init_app() or FlaskOIDC() if you are not using it

oidc.user_model(UserModel)

See [user.py](https://github.com/frederickney/flask-login-oidc/blob/master/flask_login_oidc/user.py for more information about user model

Custom login

Must be used after FlaskOIDC.init_app() or FlaskOIDC() if you are not using it

def login(oidc_auth, model,  token):
    """
    
    :param oidc_auth: oauth client
    :type oidc_auth: OAuth2Mixin
    :param model: user model
    :param token: user's oauth token
    :return: 
    """
    pass

oidc.login_user(login)

Custom logout

Must be used after FlaskOIDC.init_app() or FlaskOIDC() if you are not using it

def logout(oidc_auth):
    """
    
    :param oidc_auth: auth client
    :type oidc_auth: OAuth2Mixin
    :return: 
    """
    pass

oidc.logout_user(logout)

Custom client

Must be used after FlaskOIDC.init_app() or FlaskOIDC() if you are not using it

def client(prefix):
    """

    :param prefix:
    :type prefix: str
    :return:
    :rtype: OAuth2Mixin
    """
    pass

oidc.client(client)

Custom secret load

Must be used after FlaskOIDC.init_app() or FlaskOIDC() if you are not using it

def secret(app, prefix):
    """

    :param app:
    :type app: flask.Flask
    :param prefix:
    :type prefix:str
    :return:
    :rtype: dict
    """
    pass

oidc.secret(secret)

Enjoy

LICENSE

See License file

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_login_oidc-1.0.1.tar.gz (44.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flask_login_oidc-1.0.1-py3-none-any.whl (31.8 kB view details)

Uploaded Python 3

File details

Details for the file flask_login_oidc-1.0.1.tar.gz.

File metadata

  • Download URL: flask_login_oidc-1.0.1.tar.gz
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for flask_login_oidc-1.0.1.tar.gz
Algorithm Hash digest
SHA256 af05e2a0316a4adbf6ce3902305d257a3a1607e19edbe7ddf5a7e70128ee6d24
MD5 9c7d2cbc8446a68bbf9c55a6657ae3dd
BLAKE2b-256 9e6755c9d681d689632c0b309ae6192577c96c6b00fa98fe3d16a07d4bfdd335

See more details on using hashes here.

File details

Details for the file flask_login_oidc-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_login_oidc-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1c9b4a9c664ddafbc8dbb295f2157ba8d0add0f1fddc630dfdecde0edb62cfe8
MD5 d67d1912bb3eb6887e9d54763d9f9fcf
BLAKE2b-256 ba59e667dbccf519656c086332823c1abe698d393c6b64fb4baf9c49a37da8b2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page