Hello fellow selfhoster! on my debian server I use Caddy as reverse proxy, and would like to protect some services and files with a password. I would like, however, to be able to access some protected files programmatically, from a script. using Caddy’s built-in basic_auth works as intended, but I’d like to be able to use a login form instead of just a browser prompt. This is AFAIK not possible, so I’m looking for alternatives. Any idea?

  • dgdft@lemmy.world
    link
    fedilink
    English
    arrow-up
    5
    ·
    4 days ago

    How does programmatic access tie into the desire for a login form?

    Either way, you can do a login form -> basic auth forwarding page by rigging up some simple JS, or access programmatically in a direct way by simply setting a manual Authorization header.

    • tubbadu@lemmy.kde.socialOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      4 days ago

      How does programmatic access tie into the desire for a login form?

      I would like to keep files with “private” information protected from public access, but I would like to access them from a script. An example: i wrote a karaoke application to use with my friends, they have to go to a webpage and select the songs they like, and then the karaoke app connects to the server to get the updated preference file. I would like that the users had a “nice login form” to select their songs, and then I’d like my karaoke app to easily download the file while still keeping it password-protected

      • dgdft@lemmy.world
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        3 days ago

        Yeah, I believe you don’t need to extend Caddy at all for that.

        Add a properly-formatted Authorization header to any requests you make to the server and it’ll work. See Wikipedia page for header string format:

        https://en.wikipedia.org/wiki/Basic_access_authentication

        On the webpage side, I’d have the login form make a POST to your login endpoint using a basic auth header to pull a JWT that acts as a “real” auth key for other pages.

        This is all assuming you want to stick with basic auth as opposed to a more heavyweight option.