Skip to content

Dashboard auto-SSO redirect breaks for basic_auth (password-only) providers #64424

Description

@Goblin05

Describe the bug

When dashboard.basic_auth (the username/password auth provider) is configured as the only auth provider, accessing any protected page on the Dashboard (port 9119) triggers an HTTP 500 error.

The auto-SSO redirect sends the browser to /auth/login?provider=basic&next=... instead of /login (the password login form), and BasicAuthProvider.start_login() raises NotImplementedError because it is password-only — it has no OAuth redirect flow.

To Reproduce

  1. Configure basic auth in config.yaml:
dashboard:
  basic_auth:
    username: admin
    password_hash: ...
  1. Restart the dashboard
  2. Open http://localhost:9119 in a browser
  3. Expected: See the password login form at /login
  4. Actual: Redirected to /auth/login?provider=basic&next=... → 500 error page

Root Cause

_auto_sso_response() in hermes_cli/dashboard_auth/middleware.py is designed for OAuth providers (silent redirect to the IdP). When exactly one provider is registered, it assumes it's an OAuth provider and redirects to /auth/login?provider=.... BasicAuthProvider has supports_password = True and start_login() raises NotImplementedError, producing a 500.

# Line ~180 in middleware.py
providers = list_session_providers()
if len(providers) != 1:
    return None
# ↓ reaches here for password-only providers
provider = providers[0]
# ... builds /auth/login?provider=... URL

Fix

Skip auto-SSO when the single provider is password-only:

provider = providers[0]
if getattr(provider, 'supports_password', False):
    return None  # password-only provider, show /login form instead

Environment

  • Hermes Agent version: 0.18.2
  • Dashboard with basic_auth (password-only, no OAuth)
  • OS: Linux

Additional context

Introduced when _auto_sso_response was added for OAuth SSO convenience. It never considered password-only providers. v0.17.x did not have this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium — degraded but workaround existsarea/authAuthentication, OAuth, credential poolscomp/dashboardWeb dashboard / control panel UI (dashboard/, landing)duplicateThis issue or pull request already existssweeper:implemented-on-mainSweeper: behavior already present on current maintype/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions