[OpenSIPS-Users] learning the realm from authentication challenges

johan johan at democon.be
Fri Sep 25 08:15:57 EST 2020


do this in failure_route


     if (is_method("INVITE"))
     {
         # mark that auth was performed
         setflag(8);
         # trigger again the failure route
         t_on_failure("missed_call_registrations");
         if ($(<reply>hdr(Proxy-Authenticate)))
         {
             $var(raw_auth) = $(<reply>hdr(Proxy-Authenticate));
         }
         if ($(<reply>hdr(WWW-Authenticate)))
         {
             $var(raw_auth) = $(<reply>hdr(WWW-Authenticate));
         }
         $var(reg_start) = "/(.*?)realm=\"//g";
         $var(reg_end) = "/\"(.*)//g";
         xlog("callid=$ci: Failure_route[missed_call_registrations]: Raw 
data $var(raw_auth)");
         $var(raw_auth) = $(var(raw_auth){re.subst,$var(reg_start)});
         $var(raw_auth) = $(var(raw_auth){re.subst,$var(reg_end)});
         xlog("callid=$ci: Failure_route[missed_call_registrations]: Got 
realm data $var(raw_auth)");
         $avp(uac_realm)=$var(raw_auth);
         # repeat the request with auth response this time
         xlog("callid=$ci: Failure_route[missed_call_registrations]:let 
us send authentication");
         xlog("callid=$ci: 
Failure_route[missed_call_registrations]:FAILUREROUTE_STATUS40X_UACAUTHINVITE_DEBUG_VARIABLES: 
AVP_UAC_REALM:$avp(uac_realm) AVP_UAC_USERNAME: $avp(uac_username) 
AVP_UAC_PASSWORD:$avp(uac_password)");
         uac_auth();

}

On 25/09/2020 05:13, Jeff Pyle wrote:
> 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 <Ben.Newlin at genesys.com 
> <mailto:Ben.Newlin at genesys.com>> 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 <users-bounces at lists.opensips.org
>     <mailto:users-bounces at lists.opensips.org>>
>     *Date: *Thursday, September 24, 2020 at 9:53 PM
>     *To: *OpenSIPS users mailling list <users at lists.opensips.org
>     <mailto:users at lists.opensips.org>>
>     *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 <users-bounces at lists.opensips.org
>     <mailto:users-bounces at lists.opensips.org>>
>     *Date: *Thursday, September 24, 2020 at 9:31 PM
>     *To: *OpenSIPS users mailling list <users at lists.opensips.org
>     <mailto:users at lists.opensips.org>>
>     *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
>     Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>     http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20200925/e4961f20/attachment.html>


More information about the Users mailing list