I did something like this with Strongswan. Strongswan was configured to do authentication via client certificates, which is pretty straightforward. If the connecting client has a valid certificate signed by a known authority (Vault) with an email address matching a particular pattern, access is granted. No knowledge of users was needed ahead of time. On the client side, a user would authenticate to Vault, retrieve a short-duration (24 hours) certificate, and that was pretty much it. I had chosen Strongswan because macOS, iOS, and several other platforms are supported without third-party clients. Configuring the VPN endpoints on the clients was pretty tedious, but I was able to wrap it up with a shell script that generated configuration profiles. For a user, the flow was just authenticating to Vault and then running the script that would install the profile, which prompted for a password. It was a fair bit of research and discovery up front (Strongswan’s docs aren’t great, docs on macOS profiles aren’t great) but the end result worked very well.