7 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
Matthieu Sieben
|
709ba30157
|
Properly negotiate response content-encoding (#2852)
* Properly negotiate response content-encoding * negotiate acceptable encoding and type before building responses * remove un-necessary async * typo * Remove response content-encoding logic * Avoid using chunked encoding when writing a buffer to the response |
||
Matthieu Sieben
|
9d40ccbb69
|
Various OAuth related fixes (#2871)
* wip * tidy * tidy * tidy * Update packages/oauth/oauth-client/src/session-getter.ts Co-authored-by: devin ivy <devinivy@gmail.com> * fix combineSignals * tidy * tidy * improve typing of atprotoScopeSchema * stronger typings * tidy * ci * Fix cors error * downgrade ioredis dependency * fix ioredis version * tidy --------- Co-authored-by: devin ivy <devinivy@gmail.com> |
||
Matthieu Sieben
|
ed325d863c
|
OAuth spec alignment (#2755)
* Improve reporting of metadata validation error * Properly validate client metadata scope * Allow loopback clients to define their scopes through client_id query parameters * Require definition of "scope" in client metadata document * Restrict the value used as code_challenge_methods_supported * Remove `plain` from `code_challenge_methods_supported` * Prevent use of empty string in unsupported oidc request parameters * Centralize parsing of client metadata error * Enfore code_challenge_method=S256 request parameter * Improve error description in case of invalid loopback client_id * Enfore single scope query param in loopback clients * Disable request params scopes defaulting to client metadata scope * Centralize loopback client validation logic * add assertion utils for client ids * Improve invalid client_id error messages from BrowserOAuthClient.from() * Use scope from client metadata as default value * Improve client side validation of client metadata * Allow fetching of source maps files from browser debugger * Use the clientId to configure the OAuth client * Allow native clients to use https: redirect uris * Explicitely forbid MTLS client auth method * Improve error feedback in case of invalid client_id domain name * Remove un-spec'ed restrictions on redirect_uris based on the client_uri * Do not strip query string from URL after oauth redirect in fragment mode * Add missing "expires_in" property to OAuthParResponse type definition * Allow non canonical urls to be used as client ID * Allow client metadata to contain other return type values than "code" * Properly validate request_uri request parameter * Improve parsing and validation of client_id's * Return "invalid_client" on invalid client credentials * improved error management & reporting * performance improvement * Allow loopback client ids to omit the (empty) path parameter Co-authored-by: devin ivy <devinivy@gmail.com> |
||
Matthieu Sieben
|
dee817b6e0
|
OAuth: Add authorization scopes & remove OpenID compatibility (#2734)
* Re-use code definition of oauthResponseTypeSchema * Generate proper invalid_authorization_details * Remove OpenID compatibility * tidy * properly verify presence of jti claim in client assertion * Remove non-standard "sub" from OAuthTokenResponse * Remove nonce from authorization request * tidy * Enforce uniqueness of code_challenge * remove unused "atproto" scope * Improve reporting of validation errors * Allow empty set of scopes * Do not remove scopes not advertised in the AS's "scopes_supported" when building the authorization request. * Prevent empty scope string * Remove invalid check from token response * remove un-necessary session refresh * Validate scopes characters according to OAuth 2.1 spec * Mandate the use of "atproto" scope * Disable ability to list app passwords when using an app password * Use locally defined authPassthru in com.atproto.admin.* handlers * provide proper production handle resolver in example * properly compote login method * feat(oauth-provider): always rotate session cookie on sign-in * feat(oauth-provider): do not require consent from first party apps * update request parameter's prompt before other param validation checks * feat(oauth-provider): rework display of client name * feat(oauth-client-browser:example): add token info introspection * feat(oauth-client-browser:example): allow defining scope globally * Display requested scopes during the auth flow * Add, and verify, a "typ" header to access and refresh tokens * Ignore case when checking for dpop auth scheme * Add "jwtAlg" option to verifySignature() function * Verify service JWT header values. Add iat claim to service JWT * Add support for "transition:generic" and "transition:chat.bsky" oauth scopes in PDS * oauth-client-browser(example): add scope request * Add missing "atproto" scope * Allow missing 'typ' claim in service auth jwt * Improved 401 feedback Co-authored-by: devin ivy <devinivy@gmail.com> * Properly parse scopes upon verification Co-authored-by: devin ivy <devinivy@gmail.com> * Rename "atp" to "credential" auth in oauth-client-browser example * add key to iteration items * Make CORS protection stronger * Allow OAuthProvider to define its own CORS policies * Revert "Allow missing 'typ' claim in service auth jwt" This reverts commit 15c6b9e2197064eb5de61a96de6497060edb824e. * Revert "Verify service JWT header values. Add iat claim to service JWT" This reverts commit 08df8df322a3f4b631c4a63a61d55b2c84c60c11. * Revert "Add "jwtAlg" option to verifySignature() function" This reverts commit d0f77354e6904678e7f5d76bb026f07537443ba9. * Revert "Add, and verify, a "typ" header to access and refresh tokens" This reverts commit 3e21be9e4b5875caa5e862c11f2196786fb2366d. * pds: implement protected service auth methods * Prevent app password management using sessions initiated from an app password. * Alphabetically sort PROTECTED_METHODS * Revert changes to app password management permissions * tidy --------- Co-authored-by: devin ivy <devinivy@gmail.com> |
||
Matthieu Sieben
|
35a1264297
|
Remove non-standard *_endpoint_auth_method (#2729) | ||
Matthieu Sieben
|
acc9093d28
|
OAuth: 2FA (#2633)
* chore(ci): update setup-node & checkout actions to v4 * refactor(oauth): rename internal types to avoid conflicting types fix(oauth): support building from parcel feat(oauth): add runtime lock support to prevent concurrent session updates feat(oauth): improve metadata validation fix(oauth): allow use of handle as login hint fix: proper parsing of authorization header feat(oauth): add email 2fa support feat(oauth): adapt auth UI to match app UI * fix(oauth): improve parsing of digest algo * fix(oauth-provider): dead code cleanup * fix(oauth-provider): avoid inconsistent use of "id" prop in InputCheckbox * style(oauth-provider): use if/else instead of switch * feat(oauth-provider): stronger validation of customization data Invalid oauth customization would cause the server to crash at startup. * docs(oauth-client): explain why the abortRequest method is not mandatory * fix(oauth-client): cancel fetch response body when not used * docs: typo Co-authored-by: devin ivy <devinivy@gmail.com> * feat(oauth-provider:metadata): add client_id_metadata_document_supported metadata * fix(oauth-provider): require the content-type to be set on client metadata response * feat(common): add obfuscation utilities fix(pds): show user did in logs fix(ozone): show user did in logs * tidy * fix(simple-store): avoid leaking context when calling hooks * fix: use patch level changeset * chore(oauth-types): add changeset regarding client_id_metadata_document_supported * chore: add changeset for bsky & ozone * unify loggerMiddleware instantiation * tidy --------- Co-authored-by: devin ivy <devinivy@gmail.com> |
||
Matthieu Sieben
|
a8d6c11235
|
🚧 OAuth2 - Authorization Server (#2482)
* chore(deps): update zod * chore(deps): update pino to match entryway version * chore(tsconfig): remove truncation of types through noErrorTruncation * add support for DPoP token type when logging * fix(bsky): JSON.parse does not return value of type JSON * fix(pds): add res property to ReqCtx * fix(pds): properly type getPreferences return value * chore(tsconfig): disable noFallthroughCasesInSwitch * refactor(pds): move tracer config in own file * feat(dev-env): start with "pnpm dev" * feat(oauth): add oauth provider & client libs * feat(pds): add oauth provider * chore: changeset * feat: various fixes and improvements * chore(deps): update better-sqlite3 to version 10.0.0 for node 22 compatibility * chore(deps): drop unused tslib * fix(did): normalize service IDs before looking for duplicates * fix(did): avoid minor type casting * fix(did): improve argument validation * fix(fetch): explicit use of negation around number comparison * fix(oauth-provider): improve argument validation * feat(did): add ATPROTO specific "isAtprotoDidWeb" method * feat(rollup-plugin-bundle-manifest): add readme * feat(lint): add eqeqeq rule (only allow == and != with null) * fix(oauth-client-browser): typo in gitignore * fix(oauth-provider): properly name error class file * fix(oauth-provider): remove un-necessary useMemo * fix(did-resolver): properly build did:web document url * fix(did-resolver): remove unused types * fix(fetch): remove unused utils * fix(pds): remove unused script and dependency * fix(oauth-provider): simplify isSubPath util * fix(oauth-provider): add InvalidRedirectUriError static constructor * fix(jwk): improve JWT validation to provide better error messages and distinguish between signed and unsigned tokens * fix(pds): use "debug" log level for fetch method * fix(pds): allow access tokens to contain an unknown "typ" claim (with the exception of "dpop+jwt") * fix(jwk): remove un-necessary code * fix(pds): account for whitespace chars when checking JSON * fix(pds): remove oauth specific config * fix(pds): run all write queries through transaction or executeWithRetry fix(pds): remove outdated comments fix(pds): rename used_refresh_token columns & added primary key fix(pds): run cleanup task through backgroundQueue fix(pds): add device.id foreign key to device_account fix(pds): add comment on cleanup of used_refresh_token fix(pds): add primary key on device_account * fix(oauth-provider:time): simplify constantTime util * fix(pds): rename disableSsrf into disableSsrfProtection * fix(oauth-client-react-native): remove incomplete package * refactor(pds): remove status & active from ActorAccount * fix(pds): invalidate all oauth tokens on takedown * fix(oauth-provider): enforce token expiry * fix(pds): properly support deactivated accounts * perf(pds:db): allow transaction function to be sync * refactor(psq:account-manager): expose only query builders & data transformations utils from helpers * fix(oauth-provider): imports from self * fix(ci): add nested packages to build artifacts * style(fetch): rename TODO into @TODO * style(rollup-plugin-bundle-manifest): remove "TODO" from comment * style(oauth-client): rename TODO into @TODO * style(oauth-provider): rename TODO into @TODO * refactor(oauth-client): remove "OAuth" prefix from types * fix(oauth-client-browser): better type SessionListener * style(oauth): rename TODO into @TODO * fix(oauth-provider): enforce provider max session age * fix(oauth-provider): check authentication parameters against all client metadata * fix(api): tests * fix(pds): remove .js from imports for tests * fix(pds): change account status to match tests * chore(deps): make all packages depend on the same zod version * fix(common-web): remove un-necessary binding of Checkable to "zod" * refactor(jwk): infer jwt schema from refinement definition * fix(handle-resolver): allow resolution errors to propagate docs(handle-resolver): better handling of DNS resolution errors fix(handle-resolver): properly handle DOH responses * fix(did): service endpoint arrays must contain "one or more" element * refactor(pipe): simplify implementation * fix(pds): add missing DB indexes * feat(oauth): Resolve Authorization Server URI through Protected Resource Metadata * style:(oauth-client): import order * docs(oauth-provider:redirect-uri): add reference url * feat(oauth): implement "OAuth Client ID Metadata Document" from draft-parecki-oauth-client-id-metadata-document-latest internet draft * feat(oauth-client): backport changes from feat-oauth-client * docs(simple-store): improve comments * feat(lexicons): add iterable capabilities * fix(pds): type error in dev mode * feat(oauth-provider): improved error reporting * fix(oauth-types): allow insecure issuer during tests * fix(xrpc-server): allow upload of empty files * fix: lint * feat(fetch): keep request reference in errors feat(fetch): utilities improvements * fix(pds): allow more than one session token per user * feat(ozone): improve env validation error messages * fix(oauth-client): account for DPoP when checking for invalid_token errors * fixup! feat(fetch): keep request reference in errors feat(fetch): utilities improvements * fixup! feat(fetch): keep request reference in errors feat(fetch): utilities improvements * fix(oauth): various validation fixes feat(oauth): share client_id validation and parsing utilities between client & provider * feat(dev-env): fix ozone port number * fix(fetch-node): prevent fetch against invalid domain names * fix(oauth-provider): add typings for psl dep * feat(jwk): make type def compatible with TS 4.x * fix(oauth): fixed various spec compliance fix(oauth): return "sub" in refresh token response fix(oauth): limit token validity for third party clients fix(oauth): hide client image when not trusted * fix(oauth): lint * pds: switch changeset to patch, no breaking changes * changeset and config for new oauth deps --------- Co-authored-by: Devin Ivy <devinivy@gmail.com> |