oidc.py

Overview

The oidc.py file provides an implementation of an OpenID Connect (OIDC) client by extending a base OAuth client (OAuthClient). It is designed to interact with OIDC providers, handle OIDC-specific metadata discovery, validate ID tokens (JWTs), and fetch user information securely.

The core functionality centers around:

This file is a critical component for applications that require secure authentication via OIDC providers, enabling seamless integration with identity services like Google, Microsoft, or any OIDC-compliant system.


Classes and Methods

class OIDCClient(OAuthClient)

Extends the OAuthClient class to provide OpenID Connect specific features.

Constructor: __init__(self, config)

Initializes the OIDC client by loading provider metadata and setting up necessary endpoints and keys.


_load_oidc_metadata(self, issuer)

Fetches OIDC provider metadata from the issuer's discovery endpoint.


parse_id_token(self, id_token)

Validates and decodes an OIDC ID Token (JWT) with signature verification.


fetch_user_info(self, access_token, id_token=None, **kwargs)

Fetches user profile information from the OIDC provider.


normalize_user_info(self, user_info)

Normalizes user info dictionary to a standard format.


Important Implementation Details


Interaction with Other Parts of the System


Visual Diagram

classDiagram
    class OIDCClient {
        -issuer: str
        -jwks_uri: str
        +__init__(config: dict)
        -_load_oidc_metadata(issuer: str) dict
        +parse_id_token(id_token: str) dict
        +fetch_user_info(access_token: str, id_token: str = None, **kwargs) dict
        +normalize_user_info(user_info: dict) dict
    }
    class OAuthClient {
        +__init__(config: dict)
        +fetch_user_info(access_token: str) dict
        +normalize_user_info(user_info: dict) dict
    }
    OIDCClient --|> OAuthClient

Summary

oidc.py defines the OIDCClient class, a specialized OAuth client tailored for OpenID Connect. It simplifies OIDC integration by automating metadata discovery, securely validating ID tokens, and fetching user info. By extending OAuthClient, it inherits core OAuth2 features while adding OIDC-specific logic, making it a key component for authentication in systems supporting OIDC providers.