Den fre 29 mars 2024 kl 16:27 skrev EML <sa212+apa...@cyconix.com>:

> Before I do too much work on this, I'd like to do a sanity check. Does
> anyone know of a client which will access a repo over HTTPS, with an
> access/bearer token? This gives SSO and multi-factor authentication using
> OAuth2.
>
> The repo runs behind Apache httpd, which is using mod_auth_openidc. The
> config file sets 'AuthType openid-connect', and 'Require valid-user'. The
> repos additionally require a specific claim to access them ('Require claim
> x:y:z').
>
> This all works with git, using Git Credential Manager
> <https://github.com/git-ecosystem/git-credential-manager> (GCM; this is a
> cross-platform .NET Core app).
>
> Basically, two things need to be done:
>
> (1) HTTP requests need to specify 'Authorization: Bearer' with an access
> token. If you don't have an access token, something (a script, GCM,
> whatever) has to pop up a browser window and connect to an OAuth2 identity
> provider (IdP). The user then logs in (with MFA if configured), and the IdP
> then redirects back to localhost with a token. This means that the 'script'
> must also run a webserver to extract the token, which it can then add to
> the GET/POST/whatever request.
>
> (2) Subversion has to know about this in some way, and has to run the
> script to use a previously-generated token, or request a new one if
> necessary.
>
> The first step is not, I think, particularly difficult, and there are
> various existing scripts or apps out there that do some or all of the
> problem. GCM itself looks pretty complex. I'm not really sure what the
> complexity is. The choice to use .NET doesn't help (but it has to be
> multi-platform), but a lot of the complexity is presumably in how to use
> the credential manager to store tokens. There's also some complexity in
> handling different targets (GitHub, Bitbucket, Azure, whatever). However,
> there is a generic setup (which I use; this talks to Keycloak). My entire
> config (.gitconfig) to talk to Keycloak looks this:
>
> [credential]
>         helper = cache --timeout 7200
>         helper = "oauth"
>
> [credential "<URL>"]
>         oauthScopes       = "openid email"
>         oauthAuthURL      =
> /keycloak/realms/<REALM>/protocol/openid-connect/auth
>         oauthTokenURL     =
> /keycloak/realms/<REALM>/protocol/openid-connect/token
>         oauthClientId     = openid-cli
>         oauthRedirectUri  = http://127.0.0.1
>         oauthClientSecret = <CLIENT-SECRET>
>

This was actually discussed over on the TortoiseSVN dev list today in the
following thread https://groups.google.com/g/tortoisesvn-dev/c/ByECclvGKi8

I think the steps outlined by Thomas Åkerström is quite similar to what you
are also suggesting.

This should probably be discussed further on d...@subversion.apache.org.

Kind regards,
Daniel

Reply via email to