Jeff, be warned that the datafill for registrar is not obvious.
On 25/09/2020 16:40, Jeff Pyle wrote:
I am not route-advancing in a typical way, so my application of
credentials is a bit different perhaps.
The environment I'm in has a variety of customer-facing platforms,
over a dozen at last count. Some are for trunking, some hosted, some
hybrid. The platform I'm writing on OpenSIPS is a testing one that
will allow us to send and receive test calls to and from all of them.
So, rather than having a bunch of registrations on every test phone
for every person who might want to test, this allows each person to
have one appearance to this platform and select which upstream
platform they want to send a call to via dialed prefixes.
I use the uac_registrant module, and its registrant table, to handle
the platforms that require registrations and it works excellently. At
call time, I'm working on the scripting right now that will query the
registrant table for the appropriate credentials based on where we've
sent the call and apply them in the failure_route upon receiving a 401
or 407.
Think of it this way: when you configure a gateway in FreeSWITCH or a
SIP peer in Asterisk's chan_sip, do you need to define the realm ahead
of time? No, you don't care; it's just a mechanism under the hood
that's necessary to complete the transaction. That's where I'm at in
OpenSIPS. With Johan's parsing it looks like I'm about there, too.
Friggin' regex gets me every time.
- Jeff
On Fri, Sep 25, 2020 at 10:25 AM Ben Newlin <[email protected]
<mailto:[email protected]>> wrote:
I think you do need to have credentials associated with the
different routes you have and load those properly. From your
description, however, I don’t understand why it is dependent on
identifying the realm in the response. If multiple downstream
servers are all using the same realm (but have different
credentials?) then how are you differentiating based on the realm
value?
The idea with uac_auth is that when you send, for example, to
server broadworks1 you would load all the possible valid
credentials for broadworks1, including the realm it will challenge
with. When you then call uac_auth() from failure route, it will
look through all the loaded credentials for one with a matching
realm to the broadworks1 challenge and use that. If the call fails
for any reason to broadworks1 and then you decide to route to
server asterisk1, you would load all the possible credentials for
that server into the auth AVPs the same way and failure route
handling is the same.
You could very well have a use case for verifying the realm in
failure_route; I’m not saying you don’t. I don’t see it from what
you’ve described, but I may be missing something. I think the
reason there is no variable for pulling the challenge realm value
directly is because normally with this mechanism it shouldn’t be
needed.
I would appreciate if someone could confirm that uac_auth() will
match the realm as I’m asserting. I’m 95% sure this is how it
worked in my testing, but that was a while ago and as I said the
realm matching doesn’t appear to be documented. I’d hate to be
steering you down a wrong path.
Ben Newlin
*From: *Users <[email protected]
<mailto:[email protected]>>
*Date: *Friday, September 25, 2020 at 10:15 AM
*To: *OpenSIPS users mailling list <[email protected]
<mailto:[email protected]>>
*Subject: *Re: [OpenSIPS-Users] learning the realm from
authentication challenges
Johan,
I will definitely try that. Thank you!
Ben,
The problem is I have multiple destinations with the same
realm. In my case, several different Broadworks app servers. I
haven't checked them exhaustively but I think they all reply with
realm="BroadWorks" in their authentication headers. I've got some
Asterisk boxes in here, and I think they're all the domain of the
SIP request URI in the case of an INVITE. I think I'll have to
choose ahead of time which credentials go with which route, no?
Unless I'm still not wrapping my head around how this is supposed
to work.
- Jeff
On Fri, Sep 25, 2020 at 9:22 AM Ben Newlin <[email protected]
<mailto:[email protected]>> wrote:
Jeff,
My point was that the uac_auth() is supposed to handle the
realm matching for you. If you simply load all of the auth
data based on the call target as you already plan to do,
uac_auth() should look through that data for you to find
credentials with a matching realm. You don’t need to do that
part yourself in the script.
Ben Newlin
*From: *Users <[email protected]
<mailto:[email protected]>>
*Date: *Thursday, September 24, 2020 at 11:14 PM
*To: *OpenSIPS users mailling list <[email protected]
<mailto:[email protected]>>
*Subject: *Re: [OpenSIPS-Users] learning the realm from
authentication challenges
Good catch on Proxy-Authorization vs Proxy-Authenticate. I
think I've been looking at this too long. I checked the
module and that's exactly what it is.
My hope was to load the uac_auth user/pass AVPs ahead of time
from a DB based on where I knew I was sending the call, load
the realm one in the failure route based on what comes back in
the header, and then fire the uac_auth() function. It looks
like I may have to manually extract the realm from whichever
header comes in. Not ideal, but probably workable.
- Jeff
On Thu, Sep 24, 2020 at 9:58 PM Ben Newlin
<[email protected] <mailto:[email protected]>> wrote:
This does not appear to be documented, but I believe
uac_auth() looks through the AVPs configured in the
UAC_AUTH module and uses the first one whose realm matches
the challenge realm. So in order to authenticate any
challenge, you must load all of the possible credentials
into those AVPs.
Ben Newlin
*From: *Users <[email protected]
<mailto:[email protected]>>
*Date: *Thursday, September 24, 2020 at 9:53 PM
*To: *OpenSIPS users mailling list
<[email protected] <mailto:[email protected]>>
*Subject: *Re: [OpenSIPS-Users] learning the realm from
authentication challenges
According to the docs, $ar provides the realm from the
“Authorization” or “Proxy-Authorization” headers. Not from
the ”Proxy-Authenticate” header, which is what you have.
https://www.opensips.org/Documentation/Script-CoreVar-3-1#toc6
Ben Newlin
*From: *Users <[email protected]
<mailto:[email protected]>>
*Date: *Thursday, September 24, 2020 at 9:31 PM
*To: *OpenSIPS users mailling list
<[email protected] <mailto:[email protected]>>
*Subject: *[OpenSIPS-Users] learning the realm from
authentication challenges
I'm trying to recover the realm of an auth challenge to
OpenSIPS so I can respond to it with the uac_auth()
function, and that requires knowing the realm. The docs
say that $ar
<https://www.opensips.org/Documentation/Script-CoreVar-3-1#toc6>
should provide that, perhaps written like $(<reply>ar) to
get it in the right context. I'm having some trouble
getting the data.
failure_route[relay_failure] {
...
if (t_check_status("407")) {
xlog("L_NOTICE", "[1] Proxy-Authenticate:
$(<reply>hdr(Proxy-Authenticate))\n");
xlog("L_NOTICE", "[2] Auth Realm:
$(<reply>ar)\n");
xlog("L_NOTICE", "[3] Auth Realm: $ar\n");
}
...
}
The logs show:
/usr/sbin/opensips[33044]: [1] Proxy-Authenticate: Digest
realm="asterisk",
nonce="5f6d42140000936ad820dbcd452e6bcd145777e458dd46dd",
qop="auth"
/usr/sbin/opensips[33044]: [2] Auth Realm reply: <null>
/usr/sbin/opensips[33044]: [3] Auth Realm: <null>
Is it possible to get the realm? Is it possible to build
a response with uac_auth() for an arbitrary authentication
challenge?
This is on 3.1.0~20200923~88f89e941.
- Jeff
_______________________________________________
Users mailing list
[email protected] <mailto:[email protected]>
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected] <mailto:[email protected]>
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected] <mailto:[email protected]>
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users