Commit Graph
2550 Commits
Author SHA1 Message Date
Gustavo Valverde 539a1adac8 fix(auth): request the TikTok identity scope and keep provider bindings on refresh
TikTok returns `open_id`, `union_id`, `display_name`, and `avatar_large_url`
only under `user.info.basic`, while `username` belongs to `user.info.profile`.
Sign-in requested the profile scope alone and read fields from both, which held
together only because the identity subject was not load-bearing. It is now.

Updating a session or a user profile reissued the session cookie through the
new-sign-in path, which clears the provider account binding. Same-user refreshes
keep their binding, as the password-change path already does.
2026-07-17 12:58:34 +01:00
Gustavo Valverde 6cb30980a6 docs: align the identity backfill table padding 2026-07-17 12:45:57 +01:00
Gustavo Valverde 92d4e229ce fix(auth): isolate provider identities and tokens from provider aliases
OAuth providers without an issuer shared the `local:` namespace with
credential and SIWE identities, so a provider ID could resolve to an
internal method's identity and inherit its user. An identity match skips
every implicit-linking gate, which made that namespace the only thing
standing between an aliased provider and another method's account.

Token and account-info routes resolved their provider configuration from
the public `providerId` alias, so an SSO provider registered under a
social provider's alias could redeem its stored tokens against that
provider's client credentials. Provider instances already namespace
identity and account keys, so resolve configuration from them too.

TikTok is typed as always returning `union_id`, but the field is not
guaranteed. Reject that authentication instead of deriving a subject
from a missing value.

Correct the SSO domain rule, which rejects a provider unless every entry
resolves; the joins section, which documented an `experimental` option
that does not exist; and the Okta example, which enabled IdP-initiated
SAML that the plugin disables by default.
2026-07-17 11:53:02 +01:00
Gustavo Valverde 1e2006dc35 docs: document 1.7 identity migration 2026-07-17 08:38:38 +01:00
Gustavo Valverde a4a30946ba feat(auth)!: separate identities from provider accounts 2026-07-16 20:45:00 +01:00
Gustavo ValverdeandGitHub dbd302e422 feat(auth)!: scope accounts by issuer (#10403) 2026-07-16 17:24:34 +01:00
Gustavo ValverdeandGitHub 763a2671c5 feat(db): add compound table indexes (#10402) 2026-07-16 14:31:48 +01:00
Gustavo ValverdeandGitHub 0de88f5e61 feat(scim)!: decouple provisioning from the organization plugin (#10390) 2026-07-16 11:17:06 +01:00
bb6c1021e8 feat(organization): add getOrganization for metadata-only fetches (#10397)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 12:49:26 +00:00
MaxwellandGitHub 8784c1c1f4 chore!: move joins to advanced.database.joins (#10359) 2026-07-14 22:21:38 +00:00
MaxwellGitHubcubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>Cursor Agent
5d38b138c3 feat(drizzle): generate drizzle schema with schema namespace (#7169)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-07-07 17:57:24 +00:00
Gustavo Valverde d474e89705 fix(sync): address main to next review comments 2026-06-29 18:25:43 -04:00
Gustavo Valverde c02ea52953 chore(sync): merge main into next
Resolve the sync conflicts by keeping the next release train package versions, carrying the 1.6.23 stable changelog entries forward, and unioning the cspell word list.
2026-06-29 18:12:01 -04:00
5daa03abf8 docs: add Better Auth 1.7 Release Candidate pages (#10169)
Co-authored-by: Taesu <bytaesu@gmail.com>
2026-06-29 18:02:13 -04:00
8581f97ea0 feat(oauth): add Yandex social provider (#9138)
Co-authored-by: Taesu <bytaesu@gmail.com>
Co-authored-by: Taesu <166604494+bytaesu@users.noreply.github.com>
2026-06-27 03:32:45 +00:00
TaesuandGitHub 39c2d59b34 docs: centralize font setup (#10256) 2026-06-26 22:45:44 +00:00
Gustavo ValverdeandGitHub dfecb481fa feat(scim)!: isolate provider connections by organization (#10249) 2026-06-26 22:38:00 +01:00
Gustavo Valverde 010bd65811 chore: resolve 10246 main-to-next sync conflicts 2026-06-26 13:54:08 +01:00
Gustavo ValverdeandGitHub 3a035e968e fix(two-factor): add account-level verification lockout (#10240) 2026-06-26 13:40:00 +01:00
Gustavo ValverdeandGitHub 7c126dcd1a fix(scim): scope write-path operations and honor the active attribute (#10242) 2026-06-26 12:29:00 +00:00
Gustavo ValverdeandGitHub 8bd43d9d83 fix(core): refuse redirects on server-side OAuth requests (#10241) 2026-06-26 12:28:17 +00:00
Gustavo ValverdeandGitHub c06a56d83a fix: revoke unproven credentials on magic-link/email-OTP sign-in (#10239) 2026-06-26 13:20:07 +01:00
MaxwellGitHubcubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>Cursor AgentGustavo ValverdeTaesuTaesu
ea06c5a71f feat(drizzle-adapter): support Drizzle Relations v2 (#9489)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>
Co-authored-by: Taesu <bytaesu@gmail.com>
Co-authored-by: Taesu <166604494+bytaesu@users.noreply.github.com>
2026-06-26 11:01:48 +00:00
Gustavo Valverde 4bcda56649 chore: resolve 10178 main-to-next sync conflicts
Merges origin/main into origin/next for the replacement sync PR and records the hand-resolved package metadata, changelog, OAuth/social provider, admin, SIWE, SCIM, SSO, username, rate-limiter, and next-owned MCP/OIDC provider conflicts.
2026-06-26 06:33:24 +01:00
b5bec193a5 fix(oauth): apply user input rules to provider profiles (#10196)
Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>
2026-06-26 04:06:54 +00:00
90d509e0b9 fix(adapter): fail closed on update misses (#10180)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>
2026-06-26 03:56:39 +00:00
816d7f9252 fix(one-tap): apply configured Google hosted domain (hd) on the callback (#10197)
Co-authored-by: Maxwell <145994855+ping-maxwell@users.noreply.github.com>
Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>
2026-06-26 03:56:20 +00:00
Gustavo ValverdeandGitHub 5838df2f41 feat(oauth-provider): add refresh token reuse interval (#10145) 2026-06-26 03:49:27 +00:00
fa1e036ae7 fix(sso): validate SAML response binding against the Service Provider (#10226)
Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>
2026-06-26 03:07:43 +00:00
fcabaaffcb fix(sso): require DNS proof for every domain listed on a provider (#10227)
Co-authored-by: Gustavo Valverde <g.valverde02@gmail.com>
2026-06-26 02:49:15 +00:00
Gustavo ValverdeandGitHub 1bc370aef5 fix(siwe): reject sign-in when the provided email already belongs to another account (#10228) 2026-06-26 02:21:45 +00:00
TaesuandGitHub 5f86c3bed7 docs: restore lubiah community adapter (#10230) 2026-06-25 13:44:27 -07:00
MaxwellandGitHub 82cbbd6f1d docs: add missing disable-implicit-linking docs (#10218) 2026-06-25 10:59:14 +00:00
5953157acf fix: harden forwarded client IP resolution (#10203)
Co-authored-by: Maxwell <145994855+ping-maxwell@users.noreply.github.com>
2026-06-25 04:55:10 +00:00
TaesuandGitHub e7c8066cf1 docs: refine warning guidance across plugin docs (#10185) 2026-06-21 22:39:30 -07:00
moonevmandGitHub 6e5f7e656b docs: fix the code block format on the Stripe plugin page (#10181) 2026-06-21 02:31:43 -07:00
bdda5162f9 docs: remove extra spaces in documentation (#10174)
Co-authored-by: Taesu <166604494+bytaesu@users.noreply.github.com>
2026-06-20 22:48:59 -07:00
Gustavo ValverdeandGitHub 6ddb5554c0 chore(deps)!: upgrade dependencies to latest (#10170) 2026-06-20 10:15:37 -07:00
Gustavo Valverde 3b170f2f40 chore: sync main to next 2026-06-20 09:15:00 -07:00
Roman SirokovandGitHub 58549652dd docs: fix open in markdown url (#10162) 2026-06-20 02:06:21 +00:00
Gustavo ValverdeandGitHub e3125e872d feat(oauth-provider): honor requested UserInfo claims via a claim registry (#10156) 2026-06-19 18:08:35 -07:00
Gustavo ValverdeandGitHub dd42701af4 fix(oauth-provider): allow nonce-bound offline access without PKCE (#10153) 2026-06-19 11:18:05 -07:00
Gustavo ValverdeandGitHub d368217efc fix(oauth-provider): keep OIDC scope claims on UserInfo (#10152) 2026-06-19 10:55:51 -07:00
Gustavo ValverdeandGitHub a8200b297c feat(oauth-provider): allow confidential DCR clients without PKCE (#10146) 2026-06-19 06:29:08 -07:00
Gustavo ValverdeandGitHub 1f8b0282de fix(oauth-provider): preserve dcr client key metadata (#10144) 2026-06-18 22:46:03 -07:00
Gustavo ValverdeandGitHub 335cda702e feat(oauth-provider)!: make id-token claim authority explicit (#10140) 2026-06-18 14:25:12 -07:00
Gustavo ValverdeandGitHub 3a79aff58e feat(google): add includeGrantedScopes option (#10129) 2026-06-18 08:31:10 -07:00
Gustavo ValverdeandGitHub 97903c9cca fix(oauth): preserve account.scope across re-auth and refresh (#10128) 2026-06-18 08:17:27 -07:00
Gustavo ValverdeandGitHub 27f06181c7 revert(oauth): remove granted scopes architecture (#10123) 2026-06-17 22:27:20 -07:00
Gustavo ValverdeandGitHub de8394de20 fix(cimd): route client_id SSRF checks through the shared host classifier (#10126) 2026-06-17 18:29:06 -07:00