feat(auth): add authplaneProvider - #1
Open
muralx wants to merge 4 commits into
Open
Conversation
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
muralx
force-pushed
the
feat/authplane-provider
branch
from
July 29, 2026 13:41
7711fb3 to
7201565
Compare
…-ai#1011) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Branded Authplane provider, with a runnable example, docs and a showcase entry.
Mentioned in the README instead.
harijoe
force-pushed
the
feat/authplane-provider
branch
from
July 30, 2026 09:40
079e534 to
0160148
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a branded
authplaneProviderpreset alongside the existing providers, plus a runnable example, docs and a showcase entry. Configuration only, with no additional dependencies.Contents
packages/core/src/server/auth/providers/authplane.tspackages/core/src/server/auth/providers/authplane.test.tspackages/core/src/server/index.tsexamples/auth-authplane/dev-authserver.shhelperdocs/api-reference/authplane-provider.mdx,docs/examples/auth-authplane.mdx,docs/guides/auth-providers.mdx,docs/docs.jsonREADME.md,docs/images/showcase-authplane.pngAPI
issueris the authorization server's issuer identifier.resourceis this server's resource identifier (RFC 9728 §1.2) — the public URL clients reach, advertised in its protected-resource metadata — and it also supplies the expected token audience.audienceis available for deployments that configure an explicit override.resourceis required, unlike the other providers. Authplane binds the access token'saudto the RFC 8707resourceparameter the client sends, and the client takes that value from the advertised metadata, so a single option supplies both the advertised identifier and the expected audience.Resource identifiers are compared by exact string match, so the provider advertises the configured value verbatim and asks for it in the form it will be advertised.
issuerandresourceare both validated as absolute http(s) URLs with a host and no fragment, per RFC 8707 §2, synchronously at construction.Dynamic Client Registration is supported natively, so clients register with Authplane directly.
Example
examples/auth-authplanefollows the existing auth examples — the coffee shop finder with per-user favourites. It ships an optionaldev-authserver.shthat runs an authorization server locally in Docker and configures it for the example: registers the protected resource, creates a demo user, and writes.envwhen absent. Re-running it is safe and it never overwrites an existing.env. Nothing in the example depends on it.Verification
Unit: 383 tests across 53 files pass,
biome ciclean across 167 files, repo-widepnpm test:formatexits 0, and the example typechecks and builds against a freshly built core.End to end against a live Authplane authorization server:
/mcpreturn 401 with aWWW-Authenticatechallenge carryingresource_metadatatyp: at+jwtand anaudmatching the advertised resourcetools/listandtools/callsucceed with a valid token, and a token issued for a different resource is rejected