Thank you for your answer.

> Rather, OpenConnect expects that the *response* to the initial POST will 
> include a list of *allowed* groups. Something like this:
>    <form>…<select name="group_list" 
>label="GROUP:"><option>Foobar</option><option>Baz</option>…</select></form>
> After receiving that list, OpenConnect attempts to match the `--authgroup 
> Foo` from the command line to the allowed list 
> (https://gitlab.com/openconnect/openconnect/-/blob/master/main.c#L2762-2776), 
> and assuming a successful match it will send the `<group-select>` in its 
> *subsequent* XML POST (root tags will be either `<config-auth type="init">` 
> or `type="auth-reply"`).

Thanks, I was assuming this. So apparently I have the problem, that Openconnect 
does not do this subsequent POST request.

What's happening is, that the server does send a list of groups in the select 
form. Openconnect recognizes those, by prompting me to type in my selection if 
I do not use the `--authgroup`-parameter. It does recognize the 
`--authgroup`-parameter by skipping this prompt.
However, after the prompt (or skipping it) Openconnect does not do any further 
requests to the VPN server (at least `--dump-http-traffic` does not print any) 
but instead picks the url from the `<sso-v2-login>` from the first response and 
tries to open a browser with it. In this url however there is the wrong 
authgroup coded in (since it is from before selecting anything).

What could be the reason for Openconnect not to do the subsequent request? Is 
there something missing from the server response? Does Openconnect maybe pass 
on sending a second request if the server already send a `<sso-v2-login>`-field 
in the first request?

> Assuming that this worked without issue on older versions of OpenConnect, I 
> suspect that the problem you are encountering is actually the same as in
https://gitlab.com/openconnect/openconnect/-/issues/620#note_1415467462, namely 
that the server is confused by OpenConnect v9.12 offering newer
SSO-based auth modes, or *STRAP* HTTP headers.
> Try adding `--no-external-auth` to the command-line and see if that makes a 
> difference?

It does not work with older clients and `--no-external-auth` unfortunately does 
not help.


Von: Daniel Lenski <dlen...@gmail.com>
Gesendet: Dienstag, 6. Juni 2023 22:13
An: Popp, Thomas <thomas.p...@akquinet.de>
Cc: openconnect-devel@lists.infradead.org 
<openconnect-devel@lists.infradead.org>
Betreff: Re: Send --authgroup as <group-select> in initial POST request 
 
On Wed, May 31, 2023 at 3:48 AM Popp, Thomas <thomas.p...@akquinet.de> wrote:
> The Cisco VPN server I try to connect to expects the correct authgroup to be 
> send as <group-select> in the initial POST request, like:
>
> <config-auth client="vpn" type="auth-request" aggregate-auth-version="2">
>   ...
>   <group-select>correct-auth-group</group-select>
>   ...
> </config-auth>
>

<snip>

> I also failed to manipulate the initial POST request form with the 
> --form-entry parameter, like
> --form-entry main:group-select=correct-auth-group
> or
> --form-entry init:group-select=correct-auth-group
>
> I came to realize, that openconnect is designated to send the <group-select> 
> node,  as can be seen in the code of auth.c in line 929:
> https://gitlab.com/openconnect/openconnect/-/blob/master/auth.c#L929
>
> However, it doesn't and I can't tell why. Any idea how to fix the problem?

The way this works is a bit subtle.

Providing `--authgroup Foo` on the command-line does not directly set
`vpninfo->authgroup`, which means that the `<group-select>` node never
gets set in the *initial* XML POST request (root tag is `<config-auth
type="init">`).

Rather, OpenConnect expects that the *response* to the initial POST
will include a list of *allowed* groups. Something like this:

    <form>…<select name="group_list"
label="GROUP:"><option>Foobar</option><option>Baz</option>…</select></form>

After receiving that list, OpenConnect attempts to match the
`--authgroup Foo` from the command line to the allowed list
(https://gitlab.com/openconnect/openconnect/-/blob/master/main.c#L2762-2776),
and assuming a successful match it will send the `<group-select>` in
its *subsequent* XML POST (root tags will be either `<config-auth
type="init">` or `type="auth-reply"`).

I have never seen a Cisco server that actually requires the
`<group-select>` to appear in the *initial* POST request, and am
skeptical that this is what your VPN actually requires That would not
allow the client to discover the allowed groups on initial connection,
because the allowed groups won't be known to a client until it has
connected and retrieved the list at least onece.

> Otherwise the server will send a wrong <sso-v2-login> path in the reponse.
>
> However, openconnect v9.12-0+3.1 seems to ignore the --authgroup parameter 
> for that purpose.

Assuming that this worked without issue on older versions of
OpenConnect, I suspect that the problem you are encountering is
actually the same as in
https://gitlab.com/openconnect/openconnect/-/issues/620#note_1415467462,
namely that the server is confused by OpenConnect v9.12 offering newer
SSO-based auth modes, or *STRAP* HTTP headers.

Try adding `--no-external-auth` to the command-line and see if that
makes a difference?

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
openconnect-devel mailing list
openconnect-devel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/openconnect-devel

Reply via email to