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.2.tar.gz (44.2 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.2-py3-none-any.whl (31.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: flask_login_oidc-1.0.2.tar.gz
  • Upload date:
  • Size: 44.2 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.2.tar.gz
Algorithm Hash digest
SHA256 08a1bbdad8336216b75cb0263292468742f1450e11210c084ec5b750b6a84bc0
MD5 02541b80c6385afa9387b1f04ebff210
BLAKE2b-256 8ad258221b1ad079ae559dc86ec2d4f8068cf11df9bbf750cd60226811baf2cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for flask_login_oidc-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 abdcd1ce156258fc80028eaca0aee0d59a66e0f196d35d947114da68cd2aa721
MD5 c6520642a0420674056073afd67007db
BLAKE2b-256 929525254c0ca8e66a3c092db4fa95c4fca16b56d5b2e4942b1e8b1e51649a92

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