Skip to content

dbeaver/pro#11122 Generalize SSO contracts and add scoped access tokens - #19

Merged
serge-rider merged 8 commits into
develfrom
dbeaver/pro#11122-generalize-sso-authorization
Oct 26, 2026
Merged

serge-rider merged 8 commits into
develfrom
dbeaver/pro#11122-generalize-sso-authorization

Conversation

@alexander-skoblikov

@alexander-skoblikov alexander-skoblikov commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

Closes dbeaver/pro#11122

Summary

  • Replace desktop-specific login approval/configuration contracts with generic SSO contracts.
  • Return an OAuth access token with granted scopes and an optional internal identity token.
  • Support optional resource indicators, explicit audience verification, and RFC 6749 scope parsing.
  • Define shared full-access scope constants for Account, Storage, and Admin clients.

Related changes

Verification

  • Shared API scope, HTTP transport, JWT/JWKS, audience, and token-purpose tests passed in the backend Maven reactor.
  • Coordinated changes use the same branch in the server and desktop repositories.

AI assistance

Implementation and tests were developed with AI assistance.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The token exchange path still dereferences the optional id_token, so access-token-only clients can fail despite a valid token response.

1 open issue
What changed in this PR

This pull request generalizes the shared DataDam SSO API from desktop-specific contracts to reusable OAuth-style contracts with scoped access tokens, resource indicators, explicit audiences, and optional identity tokens.

Changes:

  • Adds RFC 6749 scope parsing, shared full-access scope constants, resource parameters, and audience-aware token verification.
  • Replaces desktop-specific login, configuration, authorization, and token models with generic SSO contracts.
  • Updates client transport, service orchestration, tests, and documentation for the new flows.

Blocking review note: DDSsoService.java still immediately requires token.idToken() after token exchange. Because id_token is optional, valid access-token-only exchanges can fail; identity-only handling should be separated from generic token exchange.

File Description
README.md Documents the generalized SSO contracts, scopes, resources, audiences, and OAuth metadata.
apis/​com.dbeaver.datadam.sso.api/​src/​test/​java/​com/​dbeaver/​datadam/​sso/​api/​DDSsoScopesTest.java Tests RFC 6749 scope parsing, formatting, deduplication, and invalid syntax.
apis/​com.dbeaver.datadam.sso.api/​src/​test/​java/​com/​dbeaver/​datadam/​sso/​api/​client/​DDSsoServiceTest.java Tests scoped tokens, resource transport, login approval, and generalized contracts.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoTokenResponse.java Defines access-token responses with granted scopes and optional identity tokens.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoTokenRequest.java Adds optional resource-indicator support to token requests.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoLoginApprovalResponse.java Defines the generalized login approval response.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoLoginApprovalRequest.java Defines the generalized login approval request.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoDesktopTokenResponse.java Removes the obsolete desktop-specific token response.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoConfigResponse.java Defines the generic SSO configuration response.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoAuthorizeRequest.java Adds resource and requested-scope authorization parameters.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​model/​DDSsoAccessIdentity.java Carries verified audience and granted scopes with access identity claims.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​DDSsoScopes.java Implements RFC 6749 scope parsing and stable formatting.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​DDSsoConstants.java Adds OAuth, resource, metadata, audience, scope, and login constants.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​client/​DDSsoTokenVerifier.java Verifies access-token purpose, audience, source, client, and scopes.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​client/​DDSsoService.java Updates token exchange and login approval orchestration for generalized contracts.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​client/​DDSsoClientConfig.java Adds resource and scope configuration.
apis/​com.dbeaver.datadam.sso.api/​src/​main/​java/​com/​dbeaver/​datadam/​sso/​api/​client/​DDSsoClient.java Sends OAuth grant and optional resource parameters and uses generic login approval endpoints.

Review effort: Lite

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Two unresolved moderate issues affect credential encoding on non-token POST requests and prevent public-client PKCE requests without a configured secret.

No open issues 🎉

1 resolved since last review

Review effort: Lite

@serge-rider
serge-rider merged commit 0f2c839 into devel Oct 26, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants