Skip to content

Credential placeholder model breaks SDKs that validate token format before making network calls #894

Closed as not planned

Description

@jyaunches

The placeholder credential model (openshell:resolve:env:*) assumes credentials flow through HTTP requests where the L7 proxy can intercept and substitute real values. This works well for header-based auth, URL path tokens (Telegram), query parameters, and Basic auth.

However, some SDKs validate credential format in-process before making any network call. When the process reads an env var and sees openshell:resolve:env:SLACK_BOT_TOKEN instead of a value matching the expected format (e.g., xoxb-*), the SDK rejects the credential immediately. No HTTP request is made, so the proxy never gets an opportunity to resolve the placeholder.

Concrete case

Slack's @slack/web-api validates the xoxb- prefix on bot tokens and @slack/socket-mode validates the xapp- prefix on app tokens. Both checks happen at initialization, before any network I/O. The placeholder fails validation, and the SDK either throws invalid_auth or silently skips channel initialization.

Scope

This affects any SDK or library that performs client-side credential format validation before its first network call. Slack is the first confirmed case, but the pattern is common — OAuth libraries checking token structure, AWS SDKs validating key format, etc.

Downstream impact

NemoClaw #1569 and #2085 are blocked on this. Slack is one of three messaging channels NemoClaw supports, and it is currently non-functional inside OpenShell sandboxes.

References

Activity

  1. derekwaynecarr commented on May 11, 2026

    @derekwaynecarr
    Collaborator

    In the future, it seems desired that as part of authoring a credential driver we include a plugin mechanism to render obfuscated tokens in a format expected by the given integration.

  2. cjagwani commented on Aug 12, 2026

    @cjagwani
    Contributor

    OpenShell 0.0.103 endpoint binding makes this a blocker again for endpoint-bound Slack providers.

    NemoClaw currently uses the supported provider-shaped aliases xoxb-OPENSHELL-RESOLVE-ENV-SLACK_BOT_TOKEN and xapp-OPENSHELL-RESOLVE-ENV-SLACK_APP_TOKEN so Hermes/Slack SDK initialization passes without exposing a real token. After #2510, SecretResolver::resolve_placeholder intentionally rejects those aliases for identity-bound keys because the alias carries no provider revision. The child environment does carry the needed identity in openshell:resolve:env:vN_KEY, but that form fails Slack's in-process xoxb-/xapp- validation.

    That leaves no secure working representation for this combination:

    • exact revisioned placeholder: preserves identity, fails SDK token-shape validation;
    • provider-shaped alias: passes SDK validation, is correctly denied as identityless at the endpoint-bound proxy.

    Could OpenShell add an identity-bearing, token-format-preserving alias contract (or equivalent credential-driver rendering) that binds the opaque provider revision plus env key and retains the endpoint/epoch checks from #2510? This now blocks NemoClaw's OpenShell 0.0.103 qualification in NVIDIA/NemoClaw#8893.

  3. github-actions commented on Aug 28, 2026

    @github-actions

    This issue has had no activity for 14 days and is now marked stale. It may be closed in 7 days if there is no further activity. Comment or remove the state:stale label to keep it open.

  4. nv-nedelman-1 commented on Sep 16, 2026

    @nv-nedelman-1

    I'm hitting this issue as well. We have a client that parses and validates a JWT, which obviously fails on the placeholder.
    The alias functionality helps in some cases, but it gets tricky/breaks down when key metadata is actually validated (e.g. JWT payload claims).

    @derekwaynecarr thoughts on how OpenShell could support in the future? Potential workarounds?

    cc @johntmyers @jmabry

  5. moved this from In progress to Done in OpenShell Roadmapon Sep 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions