All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
6.2.0 - 2026-10-20
- Add a Weblate OpenID Connect backend with Hosted Weblate defaults, configurable issuer, PKCE, official branding, and optional legal-version storage.
- Add a strategy-aware backend
get_title()method for sign-in labels.
- Bind OpenID Connect nonces to the initiating browser session and OAuth2 state, rejecting authorization codes from other login attempts. In-progress OIDC logins must restart after upgrading.
- OpenID callbacks now require a transaction value signed into the return URL and stored in the initiating session. This prevents a callback from another browser from linking an account while a login at the same provider is pending. In-progress OpenID logins must restart after upgrading; unsolicited assertions are no longer accepted.
- Reject EVE Online sign-ins when a character's owner hash changes, preventing transferred characters from authenticating as the previous local user. The old association must be removed before the new owner can sign in.
- Enforce
SOCIAL_AUTH_SLACK_TEAMagainst the workspace ID returned by Slack before login. Configurations using a workspace name or Enterprise organization ID must change to a workspace ID. - Scope Mailchimp sign-in identities to both the account and the authorizing
login, preventing different Mailchimp users on one account from sharing a
local user. Account-keyed associations migrate only when their stored login
identifier matches; rows without that evidence require authenticated linking
or account recovery. Mailchimp now rejects configured
ID_KEYvalues other thanmailchimp_identity; remove any olduser_idoverride before upgrading. - Google One Tap now requires a configured client ID before validating ID
tokens. Deployments without one must set
SOCIAL_AUTH_GOOGLE_ONETAP_KEYto keep One Tap sign-in working. - Reject Telegram callback fields containing a line feed before checking their signature, preventing one signed identity from authenticating as another UID.
- Discourse callbacks now require the session that started login, preventing login CSRF and unauthorized account linking. In-progress logins from before this upgrade, or those that lose their session, must restart.
- OAuth2 authorization starts now use distinct, session-bound, expiring states
that are claimed once before token exchange, with PKCE verifiers kept per
transaction. In-progress OAuth2 logins from before this upgrade must restart;
custom storage implementations must provide atomic
NonceMixin.consume(). New abandoned session transactions are pruned on a subsequent authorization start. - Prevent request-provided
nextvalues from resolving configuration settings into post-login redirects, which could disclose URL-like setting values. - Odnoklassniki iframe logins now confirm that the signed launch's user ID belongs to the presented provider session, preventing account substitution by moving digits between undelimited signature fields.
- Reject unverified historical-identifier matches when
ID_KEYis configured, preventing an account with a matching username from claiming a pre-6.0 association created under a stable identifier. Existing same-identifier associations still re-key; deployments with older rows should review their stored identifier keys before changingID_KEYsettings. Compatibility UID hooks retain empty-key policy semantics and require an explicit opt-in for unverified matches whenID_KEYis configured. - Box and ORCID no longer write access tokens into the shared
PROFILE_EXTRA_PARAMSsetting, preventing concurrent profile requests from using another login's token. - Email and domain allowlists now refuse authentication and account linking when a provider's e-mail address is missing or malformed. Deployments using a global allowlist with backends that omit e-mail addresses must configure the provider to supply one or scope the allowlist to compatible backends.
- VK iframe app launches can no longer associate a new VK identity with the local user already logged in to the receiving browser. Authenticated sessions now accept only a VK identity already associated with that user; anonymous launches remain unbound and replayable as documented for the VK backend.
- Odnoklassniki iframe app launches can no longer associate a new OK identity with the local user already logged in to the receiving browser. Authenticated sessions now accept only an OK identity already associated with that user.
- Keep externally resumed partial pipelines bound to the local user who initiated them, preventing a validation link from associating its provider identity with a different authenticated account.
- Fixed-provider OpenID backends now require authentication to start in the current session and accept assertions only from the exact HTTPS provider endpoint discovered at that time. Previously, an attacker-controlled OpenID provider could complete authentication under another provider's backend name and, for some unmigrated legacy associations, take over an existing account.
- Generic OpenID callbacks now require backend-scoped discovery state from the initiating or provider-authenticated restored browser session. This prevents a valid assertion initiated by an attacker from being associated with a user in another browser session.
- Document the project's security boundaries, assumptions, downstream responsibilities and triage dispositions in the threat model.
- Correlate SAML responses with the AuthnRequest using the signed
SubjectConfirmationDataInResponseTowhen the unsigned response envelope attribute is missing, so a solicited response cannot be replayed as IdP-initiated by stripping it. - Reject the Azure AD B2C placeholder
subclaims (Not supported currently. Use oid claim.and the legacy spelling without the space after the period) issued by user flows whose "Subject (sub) claim" setting is "Not supported", preventing every user of such a flow from being bound to one association. ConfigureSOCIAL_AUTH_AZUREAD_B2C_OAUTH2_ID_KEY = "oid"to use the object ID claim on those flows. Existing rows stored under the placeholder UID cannot be attributed to a specific account and should be reviewed and removed.
- Consolidate the core and Django threat models around security boundaries and guarantees, with operational guidance in the security documentation.
- Verified compatibility with Python 3.15.
- Redact request URLs from chained HTTP and transport exception messages so ordinary tracebacks omit credentials in URL paths and query strings.
- OpenID Connect partial pipelines now save the validated ID token claims when
the framework authenticates with a new backend instance, as Django does.
Resuming previously failed with
invalid_claim. - Facebook Limited Login no longer loses its validated claims and partial resume authorization when the framework authenticates with a new backend instance.
- Raise structured authentication errors for missing, malformed, invalid, or expired VK OpenAPI callback state.
- GitHub's
bad_refresh_tokenresponse now raisesAuthCredentialErrorwithreauthentication_required, likeinvalid_grant, instead of anAuthProviderError.
6.1.1 - 2026-10-10
- Reject missing provider user identifiers before converting them to strings,
preventing absent identifiers from being stored and matched as the shared UID
"None". - Use documented stable identifiers for HubSpot (
hub_idanduser_id), Monzo (user_id), WLCG (sub), Asana (data.gid), and Dropbox (account_id). HubSpot identities are scoped to both the portal and installing user. - MineID and the legacy Upwork OAuth1 backend now fail closed because their
profile responses do not expose a documented immutable account identifier.
Custom MineID deployments can configure
ID_KEYafter adding such a field to their profile response.
Existing social-auth rows whose UID is "None" cannot be attributed to a
specific provider account. Administrators should review and remove those rows,
then require affected users to authenticate again; they are not migrated
automatically.
6.1.0 - 2026-10-08
- Removed the Docker Hub OAuth2 backend (
docker) because its authorization, token, and profile endpoints are no longer available. Removesocial_core.backends.docker.DockerOAuth2from backend configuration. See #1176. - Removed obsolete authentication backends: Microsoft Live Connect (
live), Evernote Sandbox (evernote-sandbox), PixelPin (pixelpin-openidconnect), Behance (behance), and NGP VAN ActionID OpenID (actionid-openid). Their authentication endpoints have been retired or are no longer available; see #1176. Removesocial_core.backends.live.LiveOAuth2,social_core.backends.evernote.EvernoteSandboxOAuth,social_core.backends.pixelpin.PixelPinOpenIDConnect,social_core.backends.behance.BehanceOAuth2, andsocial_core.backends.ngpvan.ActionIDOpenIDfrom backend configuration. Live Connect users can configuresocial_core.backends.microsoft.MicrosoftOAuth2(microsoft-graph), but identifiers are not compatible and existing account associations are not migrated automatically. Production Evernote remains supported. This removes the old ActionID OpenID integration, not the ActionID service. Existing stored account associations are not deleted.
- OpenID session state uses explicit JSON-compatible serialization instead of pickle. In-progress OpenID logins with old session state must restart; existing linked accounts, provider associations, and authenticated sessions are unchanged.
- Resolve historical identifiers through indexed
(provider, id_key, uid)lookups instead of scanning stored JSON during authentication. Configure backend-scopedLEGACY_ID_KEYSfor explicit identifier changes. - Require matching stored identifier evidence for migration by default, except
for audited built-in transitions that lacked evidence in social-core 5.2.0.
Conflicting evidence always stops authentication, including when
ALLOW_UNVERIFIED_LEGACY_UID_MIGRATIONis explicitly enabled. Missing evidence stops authentication unless the transition's compatibility policy allows it. - Preserve historical OIDC subject aliases and atomic Vend shop-scoped migration.
- Backends return
Nonefor unavailable names instead of invented empty strings, preventing logins and account associations from clearing existing names. Name normalization still fills missing or blank fields from available names, but preserves unavailable components when derivation produces nothing. Explicit provider-supplied empty strings remain valid profile updates. - New-user creation omits unavailable configured name fields so user model defaults apply instead of inserting null values into non-null columns, including when only name fields are configured.
- OpenID keeps usable names from earlier response schemas when a later alias is blank, while preserving blanks when no usable name is supplied.
- Required Auth0, Fence, SAML, and Twitch validation remains active when Python runs with optimization enabled.
- Okta reuses the validated, cached OpenID Connect discovery loader.
- Cached methods retain argument and return type checking, including their
invalidate()andrefresh()controls.
- Storage implementations must accept the optional keyword-only
evidence_keyargument tomigrate_social_auth()and revalidate supplied evidence atomically. The pipeline now passes keyedlegacy_identifiers;legacy_uidsandget_legacy_user_ids()remain available for compatibility.
- Allowed newer Google Auth versions for the Google One Tap backend.
- Updated development dependencies, lint configuration, and CI actions.
6.0.0 - 2026-10-06
- OpenID Connect nonces expire after 30 minutes by default. Configure
SOCIAL_AUTH_<BACKEND>_NONCE_LIFETIMEto change the duration. Storage integrations must persistissuedandlifetime; stored nonces without a valid lifetime are rejected. - LinkedIn OpenID Connect no longer stores unused nonces.
- Backend signatures, hashes, and CSRF tokens use constant-time comparisons. Malformed signatures, including non-ASCII Discourse signatures, raise authentication errors instead of type errors.
- Facebook Limited Login reuses validated claims only during a saved partial pipeline resume, preventing forged resumes from authenticating a previous user.
- Google OAuth2 and Google OpenID Connect now reject UserInfo responses that do not explicitly confirm email verification. Google One Tap requires the same confirmation in its ID token.
- Email validation codes expire after seven days by default. Configure
SOCIAL_AUTH_EMAIL_VALIDATION_EXPIRED_THRESHOLDto change their lifetime. Storage integrations must persist each code's creationtimestamp; undated codes are rejected when expiry is enabled. - Tumblr, Deezer, Discourse, SciStarter, Okta, Google, Trello, Qiita, Keycloak,
Fence, CAS, Cognito, Dailymotion, Mail.ru, ArcGIS, Ubuntu, openSUSE, Yandex,
and affected Microsoft Entra ID backends now bind accounts to stable provider
or protocol identifiers. Existing associations record their identifier key
and migrate on authentication; strict deployments can disable unverified
legacy-identifier migration with
SOCIAL_AUTH_<BACKEND>_ALLOW_UNVERIFIED_LEGACY_UID_MIGRATION. - Drip, Last.fm, and Mixcloud are now association-only: connecting requires the same authenticated local user at initiation, callback, and partial resumption. Mutable provider identifiers can no longer create or authenticate local users, and connecting preserves local profile fields.
- Name normalization now runs in the shared authentication pipeline. Custom
pipelines must add
social_core.pipeline.social_auth.social_namesimmediately aftersocial_core.pipeline.social_auth.social_detailsto retain automatic conversion between full names and first/last names. - Storage integrations must persist association
id_keyvalues, acceptid_keyinget_social_auth()andcreate_social_auth(), and implementget_social_auth_by_extra_data()and atomicmigrate_social_auth(). Existing associations use an empty identifier key until migration. - Token renewal raises
AuthCredentialErrorwithreauthentication_requiredwhen a stored access token is expired and no renewal credential is available. Custom backends that exchange access tokens must overrideget_refresh_token(). - MediaWiki and Discourse groups are exposed separately from profile details.
Enable group extraction and update custom pipeline consumers to use
groupsinstead ofdetails["groups"]. MediaWiki identity retrieval now runs inuser_data()rather thanget_user_details(). - Authentication exceptions now expose stable reason codes, failure sources,
operation stages, and suggested recovery. Only
SocialAuthBaseExceptionandAuthExceptionretain broad catch compatibility; migrate removed specialized classes using the exception reference in social-docs. - HTTP failures no longer infer cancellation from HTTP 400 or token expiry from HTTP 401. Provider diagnostics are separate from safe exception messages.
- Strategies must implement
get_request_data()instead of overridingrequest_data(). The latter now returns effective data for the active partial pipeline, including confirmed external-link data. - Pipeline steps no longer receive an automatic
requestargument. Usestrategy.request_data()for parameters and the framework strategy'srequestattribute for its native request object. - Legacy disconnect partials without a pipeline type must restart the disconnect flow. Legacy authentication partials remain resumable.
- Configurable external group extraction and login allow lists for Azure, OIDC, Keycloak, Okta OAuth2, SAML, GitLab, MediaWiki, and Discourse, with a strategy hook and optional pipeline step for local group synchronization. Existing CAS allow lists continue to work without pipeline changes.
- Human-readable
titleand optionaliconmetadata for authentication backends, with packaged icons shared with Django applications. Backend identifiers remain unchanged; display labels follow current service branding. - VK ID OAuth2 backend (
vk-id) with mandatory S256 PKCE, payload callbacks, server-side profiles, and device-bound refresh tokens with automatic renewal. - Azure AD backends support an explicit
AUTHORITY_URLand opt-in PKCE throughUSE_PKCE. Azure AD B2C exposes alogout_url()helper using policy discovery. - Reusable
BaseAuth.ASSOCIATION_ONLYcapability for user-bound connections, shared by Drip, Last.fm, Mixcloud, and Twilio Connect. - Scoped pipeline request data, stored separately from pipeline arguments. Existing partials with request data in their arguments remain readable.
- Life Science EOSC OpenID Connect backend (
life_science_eosc) with temporary configuration for the EOSC federation. - Name normalization controls
SOCIAL_AUTH_<BACKEND>_FIRSTLAST_FROM_FULLandSOCIAL_AUTH_<BACKEND>_FULL_FROM_FIRSTLAST, both enabled by default.
- Updated development dependencies and CI actions.
- Allowed newer Google Auth versions for the Google One Tap backend.
BaseAuth.get_user_names()is deprecated. Backends should return provider-supplied names fromget_user_details()and leave normalization to thesocial_namespipeline step.
- Facebook Graph API quota errors are classified as
rate_limited, including responses with HTTP 400 or 403, so callers receive retry guidance. - Facebook Limited Login partial pipelines preserve validated claims across repeated resumes, including after the original ID token expires.
- OAuth2 renewal no longer substitutes access tokens for missing refresh tokens. Facebook retains its access-token exchange, and Zoom and PayPal now store refresh tokens by default. Existing accounts without a refresh token need another provider login to obtain one.
- Auth0 caches signing keys by JWKS URL for 24 hours and refreshes them when a token references an unknown key ID or a token without a key ID fails signature verification. Refreshes preserve other domains' cached keys and retain existing keys if fetching or parsing replacements fails.
- Exclude tests and their key fixtures from wheels while retaining them in source distributions for downstream testing.
- VK OAuth2 accepts aliased and conditional
EXTRA_DATAentries when requesting profile fields, and requests the supportedphoto_50field while preserving the legacyphotoanduser_photoresponse keys. - Azure tenant and B2C backends honor
OPENID_CONFIGURATION_URLoverrides. - Azure's
get_auth_token()uses stored refresh tokens and persists refreshed credentials instead of sending an access token as a refresh token. - Resumed authentication and disconnect pipelines consistently expose their effective request data without replacing the native framework request.
- Saved request data is deserialized before use, including strategies that encode mappings as strings or bytes.
- Partial pipelines are bound to authentication or disconnect so an unrelated saved step cannot skip disconnect permission checks.
- OpenID Connect partial pipelines now preserve validated ID token claims when resuming with a new backend instance, fixing login failures since 5.1.0.
- Shopify partial pipelines now use the saved shop instead of resume request parameters, and Apple preserves callback names across early pipeline pauses.
- Legacy OpenID partial pipelines now preserve verified responses and signed extension data instead of repeating callback verification on resume.
5.2.0 - 2026-09-30
- Added a CESID AAI OpenID Connect backend.
- Added an optional
userargument todo_auth()and aBaseAuth.prepare_auth()hook for backend-specific authentication initiation.
- Twilio Connect is now association-only: starting and completing a connection requires the same authenticated local user. Twilio callback data can no longer create or authenticate users.
- Facebook App authentication now binds access-token and signed-request
callbacks to the browser session, preventing login CSRF and unauthorized
account linking. Custom Facebook App templates must preserve the query string
in
FACEBOOK_COMPLETE_URIwhen submitting the callback. - Weixin app authentication now validates OAuth state before exchanging codes, preventing login CSRF and unauthorized account linking.
- Last.fm authentication now binds callbacks to the browser session that initiated the login, preventing login CSRF and unauthorized account linking.
- GitHub App authentication now validates OAuth state before exchanging codes. Stateless installation callbacks restart a state-protected OAuth flow, preventing forged installation parameters from enabling login CSRF.
- VK OpenAPI authentication now uses the signed session's user ID instead of trusting the ID supplied in callback data.
- Updated development dependencies and CI actions.
- Allowed newer Google Auth versions for the Google One Tap backend.
5.1.1 - 2026-09-18
- VK app authentication now fetches user profiles directly from VK and verifies that the profile ID matches the signed viewer ID, preventing forged callback data from overriding the authenticated identity and profile.
- Added
AuthReauthenticationRequired, a subclass ofAuthTokenError, for OpenID Connect token refreshes that require the user to sign in again.
- Updated development dependencies and CI actions.
- Allowed newer Google Auth versions for the Google One Tap backend.
- Authentication backends now consistently honor configurable user ID keys.
- Auth0 now requests the required
openid,profile, andemailscopes and raisesAuthTokenErrorwhen the token response lacks an ID token. - OpenID Connect now validates required ID token claims consistently and handles legacy token refresh identity context more reliably.
- SAML parsing, decryption, and validation failures now consistently raise authentication exceptions, as do unknown or invalid identity provider names.
- SAML responses without RelayState now include the resolved identity provider name when only one provider is configured.
- Discontinued OAuth backends: EchoSign, ExactTarget, Pocket, Runkeeper, Skyrock, and Withings.
5.1.0 - 2026-08-06
- Added a Helmholtz AAI OpenID Connect backend.
- Native applications can allow private-use redirect URI schemes with the
ALLOWED_REDIRECT_SCHEMESsetting.
- OpenID Connect backends now validate ID tokens returned during token refresh and reject changes to the authenticated identity.
- Updated development dependencies and CI actions.
- Updated the Coinbase backend to use current OAuth endpoints, scopes, API versioning, and token revocation parameters.
- HTTP 403 responses from authentication providers now raise
AuthForbidden. - JWT verification failures are now consistently wrapped in social-core authentication exceptions.
5.0.2 - 2026-06-26
- LINE backend now validates callback state before exchanging authorization codes, preventing login CSRF.
- Shopify backend now sends and validates OAuth state, preventing login CSRF.
- Updated development dependencies and CI actions.
- Updated the Google OAuth documentation link.
5.0.1 - 2026-06-24
- Externally resumable partial request links now require confirmation even in the browser session that created the partial, preventing validation links from being consumed by a plain GET.
5.0.0 - 2026-06-23
- LoginRadius backend now validates callback state to prevent login CSRF.
- Odnoklassniki app backend now ignores untrusted callback API hosts and validates returned user details.
- Partial pipeline resume now requires session ownership or explicit external resume confirmation to prevent login CSRF.
- SAML responses are now validated against the original AuthnRequest when possible.
- Twilio backend now preserves HTTPS callback URLs and validates callback state to prevent login CSRF.
- Auth0 OpenID Connect configuration now uses the correct base URLs.
- Authentication now handles invalid email addresses without crashing.
- Vend OAuth user IDs are now scoped by shop.
- VK app authentication now requires an auth key.
- Discontinued OAuth backends: AppsFuel, Beats Music, ChangeTip, Clef,
Edmodo, 500px (
five_hundred_px), legacy Google App Engine bundled Users (gae), Jawbone, Moves, Mozilla Persona, Readability Parser API, and Wunderlist. - Discontinued Google+ Sign-In backend (
google-plus/GooglePlusAuth).
4.9.1 - 2026-04-30
- GitHub backend now handles scoped email fetching deterministically.
- OpenID Connect missing token handling.
- Microsoft refresh token and expiry handling.
- Partial pipeline handling for Django
QueryDictvalues.
4.9.0 - 2026-04-29
This release might contain breaking changes. Review the removed backends and stricter OAuth, OpenID Connect, and Azure AD validation before upgrading.
- OpenID Connect claim names for email, first name, last name, and full name can now be configured.
- GitHub backend now stores fetched emails in pipeline data.
- Azure AD backends now use OpenID configuration and JWKS for token validation.
- Built-in provider URLs now consistently use HTTPS.
AUTH_EXTRA_ARGUMENTSvalues are no longer overridden by request data unless the key is listed inAUTH_EXTRA_ARGUMENTS_OVERRIDE_ALLOWLIST.- Requests now fall back to a default timeout when no timeout is configured.
- Improved the publishing workflow.
- Removed obsolete Rdio, Shimmering, and ThisIsMyJam backends.
- Removed legacy OAuth1 backends for Douban and Mendeley.
- Apple ID backend now validates the ID token issuer.
- Azure AD backends now validate ID token signatures, issuer, audience, tenant, and policy claims. Tokens accepted by earlier versions might now be rejected.
- OpenID Connect backends now reject UserInfo responses whose
subdoes not match the validated ID token subject.
4.8.7 - 2026-04-23
- OpenID Connect backends can now opt in to PKCE support
- PKCE defaults now match RFC 7636 requirements
- Tightened redirect URL validation
- Tightened OAuth state handling for Clever, Eventbrite, GoClio, MailChimp, SurveyMonkey and Untappd backends
- SAML authentication now restores saved sessions only after response validation
4.8.6 - 2026-04-20
storage.UserProtocolnow supports read-only attributes for better type-checker compatibility- Improved type annotations and enabled mypy type checking in CI
sanitize_redirect()now handles invalid redirect values that raiseValueError- Fixed timezone handling when working with dates
- Require
PyJWT >= 2.12.0to address CVE-2026-32597
4.8.5 - 2026-02-10
- Fixed partial pipeline handling for unauthenticated users
4.8.4 - 2026-02-10
- Improved type annotations
- Code cleanups
- Improved error handling in SAML
- Add Azure AD(Entra ID) federated client assertion support (FIC)
4.8.3 - 2025-12-18
- Added registry to configured default strategy
4.8.2 - 2025-12-18
- The timeout parameter can be again configured
- Refactored HTTP authentication code
- Loosened some type checks for better downstream compatibility
ID_KEYis now configurable- Improved token expiry validation
- Additional OIDC parameters are now supported
- Improved refresh token logic
- Extended type annotations
- String RelayState in SAML is again supported
- Better handle OpenID exceptions
- itembase backend
- nk backend
- OAuth1 backend for Yahoo
- Do you see more backends where matching service is no longer available? Tell us to help identify unused code.
4.8.1 - 2025-10-09
- Fixed
extra_data()invocation fromrefresh_token() - Replaced jose with PyJWT in Ping backend
- Dropped OAuth1 backend for OpenStreetMap
- OAuth2 URLs can now be overridden in the configuration
4.8.0 - 2025-10-07
- Fixed Gitea backend API authentication headers
- Improved
RelayStateand attributes handling in the SAML backend - Changed domains for VK backend
- All API calls now include User-Agent header
- OIDC uses info from
id_tokenwhen not present in the response - Bring back option to skip and customize
at_hashvalidation in OIDC - Dropped support for Python 3.9 and added support for Python 3.14
- Invalid API token will now raise
AuthTokenError - The
extra_datamethod of backends now receives pipeline arguments aspipeline_kwargs
- Auth0 OIDC backend
- Inactive users can be allowed to authenticate using
ALLOW_INACTIVE_USERS_LOGIN - Support group whitelisting in CAS
4.7.0 - 2025-06-27
- Fixed getting user info in LinkedIn authentication.
- Fixed okta OIDC authentication URLs.
- Dropped AOL OpenID backend.
- Improved error handling in ORCID.
- Fixed Soundcloud OAuth2 authorization.
- More OIDC configuration options.
- Session restore with stricter SameSite cookie policy.
- JWT leeway configuration for some backends.
4.6.1 - 2025-04-28
- Fixed crash in partial pipelines for some backends
4.6.0 - 2025-04-25
- Added type annotations
- Modernized build system
- OAuth2 backends now default to POST method
- Code cleanups
- Tests use responses instead of HTTPretty
- Improved error handling in case of missing parameters
- Kick OAuth2 backend
- OpenIdConnect-based backend for Fedora
- Lifescience AAI backend
- NFDI (OpenID Connect) backend
- Removed no longer available backends: khanacademy, professionali.ru, BitBucket OAuth 1.0
4.5.6 - 2025-02-13
- Reverted unintended change in OpenId storage API.
4.5.5 - 2025-02-13
- Allow per-backend user pipeline settings.
- Add AzureADOauth2 backend using the v2.0 API.
- Google One Tap implementation.
- Handle case where user has not registered a
family-namewith ORCID - Fix access token expiration and refresh token handling in GitHub backend
- Allow overriding emails to always be fully lowercase with
SOCIAL_AUTH_FORCE_EMAIL_LOWERCASE. - Dropped
tokensalias foraccess_tokenonUserMixinwhich has been deprecated for 10 years now. - LinkedIn OAuth API updates.
- Modernize release process.
- Code cleanups.
- Initial type annotations.
4.5.4 - 2024-04-25
- LinkedIn supports refresh token
- SteamOpenId validation of identify URL
- Box state redirection
- The
uidis automatically converted to string in the pipeline - Mediawiki error handling
4.5.3 - 2024-02-14
- OpenStreetMap OAuth2
- Etsy backend fixes
4.5.2 - 2024-01-26
- Etsy backend
- Updated Facebook API version to 18.0
- Make AppleID work with multiple identifiers
4.5.1 - 2023-11-29
- OpenID Connect skips
at_hashvalidation when missing redirect_nameis now passed to backend ondo_completenextis preserved through SAML RelayState- Add Discogs backend
- Add BitbucketDataCenterOAuth2 backend
- Keycloak's
ID_KEYis no longer configurable (it never worked)
4.5.0 - 2023-10-31
- Add backend for LinkedIn OpenID Connect
- Add backend for EGI Check-in
- Support Python 3.12 (and 3.11)
- Add backend for the WLCG IAM testing site
- Add ping identity OIDC backend
- Add uffd oauth2 backend
- Add Clever backend
- Add Twitter OAuth2 backend
- Add backend for e-infra.cz
- Replace jose with pyjwt
4.4.2 - 2023-04-22
- Fixed Azure AD Tenant authentication with custom signing keys
- Added CAS OIDC backend
- Made Keycloak
ID_KEYconfigurable
4.4.1 - 2023-03-30
- Moved Facebook Limited Login to a separate module to avoid extra dependency
- Update Azure AD B2C base URL to match updated endpoints
4.4.0 - 2023-03-15
- Backend for OpenInfra OpenID
- Facebook Limited Login backend
- Add support for Python 3.11
- Removed OpenStackDevOpenId backend
- Updated
user_datamethod inStripeOAuth2to returnemailinget_user_details - Removes fixed version of
lxml - Fixed OIDC crash on groups
- Fixed Qiita users identification
- Dropped support for TLSv1
- Coding style improvements
4.3.0 - 2022-06-13
- Add backend for Hashicorp Vault OIDC backend
- Add generic OpenID Connect backend
- Add Grafana OAuth2 backend
- Add MusicBrainz OAuth2 backend
- Fixed redirect state for Keycloak backend
- Add fallback to RSA256 in OpenID Connect when alg is not set
- Fixed Azure backend so it can be used with all Azure authority hosts
4.2.0 - 2022-01-17
- Add fields that populate on create but not update
SOCIAL_AUTH_IMMUTABLE_USER_FIELDS - Add Gitea oauth2 backend
- Add Twitch OpenId backend
- Add CI Logon backend
- Add support for Python 3.10
- Fixed Slack user identity API call with Bearer headers
- Fixed microsoft-graph login error
- Fixed Twitch OAuth2 backend
- Fixed Facebook API version
- Fixed Okta authentication URLs
- Fixed Globus JWT signature algorithm
- Fixed kid key rotation for OpenID Connect
- Fixed e-mail fetching from Azure
- Fixed vkontakte API version
- Restricted lxml to 4.6.x to avoid problems in SAML
4.1.0 - 2021-03-01
- Discourse backend
- Osso backend
- Add
getanddeleteclass methods forNonceMixin - Use strategies as interface to fetch backends
- Get Apple user first and last name from
self.data - Instagram Legacy API has been replaced with Instagram Basic Display API since the first one was deprecated, see.
- Store
expires_infor Zoom backend - Dropped support no longer working Dropbox v1 API
- Several improvements to the ORCIDOAuth2 backend
- Make WHITELIST_* settings properly case insensitive
- Fixed token validation in the AzureADV2TenantOAuth2 backend
4.0.3 - 2021-01-12
- Updated PyJWT version to 2.0.0
- Remove six dependency
4.0.2 - 2021-01-10
- Fixes to Github-action release mechanism
4.0.1 - 2021-01-10
- Fixes to Github-action release mechanism
4.0.0 - 2021-01-10
- PayPal backend
- Fence OIDC-based backend
- Dropped Python 2 support from testing stack
- Remove discontinued Google OpenId backend
- Remove discontinued Yahoo OpenId backend
- Fix
jwt.decode()passed algorithm - Prevent
PyJWTv2.0.0 being installed - Update Facebook Graph API to 8.0
- Update Amazon fetch-profile URL
- Fix Azure AD Tenant, unable to load certificate
- Fix Okta well-known URL
- Updated Discord's API hostname from discordapp.com to discord.com
- Pass
client_secretin auth-complete on Kakao backend
3.4.0 - 2020-06-21
- Zoom backend
- Directly use
access_tokenin Azure Tenant backend - Support Apple JWT audience
- Update partial session cleanup to remove old token from session too
- Fetch user email in Okta integration
- Improve Python 3.9 compatibility
- Send proxies in request
- Improve error handling in Apple backend
- Properly support case insensitive matching of whitelist settings
3.3.3 - 2020-04-16
- Updated list of default user protected fields to include admin flags and password
3.3.2 - 2020-03-25
- Updated package upload method to use
twine
3.3.1 - 2020-03-25
- Reverted PR #388 due to dependency license incompatibility
3.3.0 - 2020-03-17
- Okta backend
- Support for SAML Single Logout
- SimpleLogin backend
- SurveyMonkey backend
- HubSpot backend
- MRG backend
- Sign in with Apple backend
- Allow ignoring of default protected user fields with option
SOCIAL_AUTH_NO_DEFAULT_PROTECTED_USER_FIELDS - Support for users field names mapping
- Added GithubAppAuth backend
- Add refresh token to Strava backend, change username and remove email
- Update test runner to PyTest
- Add python 3.7 CI target
- Send User-Agent header on Untappd backend
- Updated Naver API support from XML to JSON format
- Use
unidecodeto cleanup usernames from unicode characters - Update Twitch API support from v3 to v5
- Properly setup
pytestversion for Python2 and Python3 - Fix some spelling mistakes in docstrings
- Fix old fields from FIELDS_STORED_IN_SESSION persisting in session
- Github: pass access token in a header instead of in a query parameter.
- Update Kakao API support from v1 to v2
- Update Twitch API support to v5
- Updated Patreon API support from v1 to v2 per issue #307
- Fix
user_detailsin user pipeline to allow model attributes to be updated - Updated Atlassian API urls
3.2.0 - 2019-05-30
- Cognito backend
- OpenStack (openstackid and openstackid-dev) backends
- Updated Linkedin backend to v2 API
- Facebook: Update to use the latest Graph API v3.2
- Send User-Agent header on GitHub backend
- Remove profile scope and verification at hash on Elixir backend
- Mark description as Markdown for PyPI
- Use
hmac.compare_digestfor constant time comparison - Replace deprecated Google+ API usage in GoogleOpenIdConnect
- Defined scope separator for Strava backend
- Ensure
saml_config.jsonis included by addint it toMANIFEST.in - Include
email_verifiedas part of user details on Auth0 backend - Include Shopify
versionparameter on Shopify session setup - Define
SOCIAL_AUTH_SHOPIFY_API_VERSIONsetting to override default API version - Check user
idattribute existence before using it - Pull
last_namefromfamily_namein Cognito backend - Ignore key errors on Naver backend for missing attributes
3.1.0 - 2019-02-20
- Universe Ticketing backend
- Auth0.com authentication backend
- Update Bungie backend dropping any Django reference
- Enable and fix JWT related tests
- Remove PyPy support from Tox
- Drop support for Python 3.4 in Tox
- Allow to override JWT decode options in Open ID Connect base backend
- Pass access token via Authorization header to Google user data url
- Updated
user_datamethod inAzureADOAuth2to returnaccess_tokenifid_tokenis not present in response
3.0.0 - 2019-01-14
- Updated Azure B2C to extract first email from list if it's a list
- Replace deprecated Google+ API usage with https://www.googleapis.com/oauth2/v3/userinfo
- Updated Azure Tenant to fix Nonetype error
- Updated comment denoting incorrect setting name
- Yandex: do not fail when no email is present
- Mediawiki: do not fail when no email is present
- Mediawiki: enhance
get_user_detailsto return more details
2.0.0 - 2018-10-28
- Telegram authentication backend
- Keycloak backend is added with preliminary OAuth2 support
- Globus OpenId Connect backend
- Discord OAuth2 backend
- SciStarter OAuth2 backend
- Flat OAuth2 backend
- ELIXIR OpenId Connect backend
- Atlassian OAuth2 backend
- GitHub backend now uses
stateparameter instead ofredirect_state - Correct setting name on AzureAD Tenant backend
- Introduce access token expired threshold of 5 seconds by default
- Delete partial token from session if still present
- Use
userPrincipalNameto setusernameandemailaccordingly - Send authorization headers to Kakao OAuth2, properly fill user details
- LINE API update to v2.1
- Use
unitest2with Python 3 - Update Slack backend to use computed usename on teams setups
- Enforce
unicode_literalson Slack backend - Update ORCID backend to support Member API
- Updated Pixelpin backend to use the new OpenId Connect service
- Update
sanitize_redirectto invalidate redirects like///evil.com - Update Coinbase API endpoint
- Dropped Python 3.3 support
- Updated Weixin backend to use
urlencodefromsix - Updated Google+ backend to properly process requests with
id_token - Updated OpenId connect dependencies
1.7.0 - 2018-02-20
- Update EvenOnline token expiration key
- Update OpenStreetMap URL to
https - Fix LinkedIn backend to send the oauth_token as
Authorizationheader - Fixed
extra_dataupdate to use thealiasas key too - Make
signed_requestoptional in Facebook App OAuth2 backend - Support string and lists on SAML permanent id value
- Correct sending
paramssending onGETaccess-token retrieval case - Ensure b2c policy name check
- Use
extras_requrieto specify python specific version dependencies
- Added support for AzureAD B2C OAuth2
- Added LinkedIn Mobile OAuth2 backend
1.6.0 - 2017-12-22
- Fix coinbase backend to use api v2
- Default
REDIRECT_STATEtoFalseinFacebookOAuth2backend. - Add revoke token url for Coinbase OAuth2 backend
- Fix LinkedIn backend to send
oauth_tokenas request header - Make partial step decorator handle arguments
- Added support for ChatWork OAuth2 backend
1.5.0 - 2017-10-28
- Fix using the entire SAML2 nameid string
- Prevent timing attacks against state token
- Updated GitLab API version to v4
- Enforce UTC when calculating access token expiration time
- Cleanup user attributes update from social details
- Send authorization header on Reddit auth
- Added support for tenant for Azure AD backend
- Added JWT validation for Azure AD backend
- Added support for Bungie.net OAuth2 backend
- Added support for Eventbrite OAuth2 backend
- Added support for OpenShift OAuth2 backend
- Added support for Microsoft Graph OAuth2 backend
1.4.0 - 2017-06-09
- Fix path in import BaseOAuth2 for Monzo
- Fix auth header formatting problem for Fitbit OAuth2
- Raise AuthForbidden when provider returns 401.
- Update Facebook API to version 2.9
- Speed up authorization process for VKAppOAuth2
- Apply same sanitization as on connect to disconnect.
- Disable
redirect_stateusage on Disqus backend
- Added Udata OAuth2 backend
- Added ORCID backend
- Added feature to get all extra data from backend through
GET_ALL_EXTRA_DATAboolean flag. - Added Patreon provider
1.3.0 - 2017-05-06
- Use extra_data method when refreshing an
access_token, ensure that auth-time is updated then - Added 500px OAuth1 backend
- Added Monzo OAuth2 backend
- Added
get_access_tokenmethod that will refresh if expired
- Updated email validation to pass the partial pipeline token if given.
- Prefer passed parameters in
authenticatemethod - Properly discard already used verification codes
- Save SAML attributes in
extra_data - Note
id_tokenin GooglePlusAuth's AuthMissingParameter
1.2.0 - 2017-02-10
- Limit Slack by team through
SOCIAL_AUTH_SLACK_TEAMsetting
- Enable defining extra arguments for AzureAD backend.
- Updated key
expirestoexpires_infor Facebook OAuth2 backend - Updated Slack
idfetch to default to useridif not present in response
1.1.0 - 2017-01-31
- Mediawiki backend
- Strategy method to let implementation cleanup arguments passed to the authenticate method
- Removed OneLogin SAML IDP dummy settings while generating metadata xml
- Fixed Asana user details response handling
- Enforce defusedxml version with support for Python 3.6
- Updated documentation URL in backends
1.0.1 - 2017-01-23
- Fixed broken dependencies while building the package
1.0.0 - 2017-01-22
- Store partial pipeline data in an storage class
- Store
auth_timewith the last time authentication took place, useauth_timeto determine if access token expired - Ensure that
testkey.pemis distributed - Added Asana OAuth2 backend
- Removed the old
save_status_to_sessionto partialize a pipeline run
0.2.1 - 2016-12-31
- Defined
extrasfor SAML, and "all" that will install SAML and OpenIdConnect - Added
auth_timein extra data by default to store the time that the authentication took place
- Remove set/get current strategy methods
- Fixed the
extrasrequirements defined in the setup.py script
0.2.0 - 2016-12-31
- Reorganize requirements, make OpenIdConnect optional
- Split OpenIdConnect from OpenId module, install with
social-core[openidconnect]
0.1.0 - 2016-12-28
- Added support for GitLab OAuth2 backend. Refs #2
- Added support for Facebook OAuth2 return_scopes parameter. Refs #818
- Added support for per-backend USER_FIELDS setting. Refs #661
- Added
expires_inasexpiresfor LinkedIn OAuth2. Refs #666 - Added
SOCIAL_AUTH_USER_AGENTsetting to override the default User-Agent header. Refs #752 - Enabled Python 3 SAML support through python3-saml package. Refs #846
- Added better username characters cleanup rules, support for a configurable cleanup function through SOCIAL_AUTH_CLEAN_USERNAME_FUNCTION (import path) setting.
- Added configurable option SOCIAL_AUTH_FACEBOOK_*_API_VERSION to override the default Facebook API version used.
- Add Lyft OAuth2 implementation to Python Social Auth (port from #1036 by iampark)
- Added the ability to specify a pipeline on a per backend basis (port from #1019 by keattang)
- Add support for MailChimp as an OAuth v2 backend (port from #1037 by svvitale)
- Added Shimmering backend (port from #1054 by iamkhush)
- Added Quizlet backend (port from #1012 by s-alexey)
- Added Dockerfile to simplify the running of tests (
make docker-tox)
- Changed Facebook refresh token processing. Refs #866
- Update Google+ Auth tokeninfo API version, drop support for deprecated API scopes. Refs #791.
- Fixed OAuth1/2 early state validation on error responses.
- Disabled SAML test when running on Travis-ci on Python 3.5 since it segfaults probably by a bad build in one of the dependencies
- Fixed Xing backend testing broken by previous change
- Fixed Xing backend dropping
callback_uriandoauth_verifierparameters on authenticated API calls. Refs #871 - Updated slack backend implementation, update API endpoints used, add test case.
- Changed Dailymotion user data API endpoint
- Changed how "false" values are treated in the user attributes update pipeline
- Fix google OpenID Connect (port from #747 by mvschaik)
- Update Facebook api version to v2.8 (port from #1047 by browniebroke)
- Remove Facebook2OAuth2 and Facebook2AppOAuth2 backends (port from #1046 by browniebroke)
- change username, email and fullname keys (port from #1028 by inlanger)
- Moves fix convert username to string (port from #1021 by WarmongeR1)
- Fix auth_params for Stripe backend (port from #1034 by dchanm)
- Preserve order of backends in BACKENDSCACHE (port from #1004 by tsouvarev)
- Don't lose custom exception message on raising AuthCanceled (port from #1062 by dotsbb)
- Fixed VK backend (port from #1007 by DeKaN)
- Updated Dropbox backend (port from #1018 by illing2005)
0.0.1 - 2016-11-27
- Split from the monolitic python-social-auth codebase