Re: [Axis2] - Problem with authentication Negotiate

robertlazarski <[email protected]> Fri, 16 Feb 2024 15:00:02 -1000
Newsgroups gmane.text.xml.axis.user
Message-ID <CABpPLBUOyhhpApGDrQZLPevAaBZudzaEvjuip463pPcb+Jg4Rw@mail.gmail.com>
--00000000000010c10d06118962df
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

To further clarify, see the example using CACHED_HTTP_CLIENT below; however
that example is going to change slightly soon for httpclient 5.x.

https://axis.apache.org/axis2/java/core/docs/http-transport.html

On Fri, Feb 16, 2024 at 2:57=E2=80=AFPM robertlazarski <robertlazarski@gmai=
l.com>
wrote:

> I looked more into this and I found AXIS2-4318 from 2012 which states the
> reason for dropping the support of those features below.
>
> Keep in mind that Axis2 1.6.x was the era of commons-httpclient 3.x. Whil=
e
> 4.x is currently in our trunk, these next several days I will be upgradin=
g
> to 5.x so anything we do here needs to work with the latest Apache
> httpclient release.
>
> https://issues.apache.org/jira/browse/AXIS2-4318
>
> 3) drop authenticator preemptive authentication support
>
> Preemptive authentication is considered unsecure and is strongly
> discouraged. Moreover the code found in examples:
> http://hc.apache.org/httpcomponents-client/examples.html is no longer
> officially supported. Which means that we should drop preemptive
> authentication support from the trunk; alternatively we can allow a numbe=
r
> of pluggable mechanisms to allow users to enable preemptive auth. The use=
r
> would have to provide HttpRequestInterceptor and HttpResponseInterceptor
> implementations as well as a means to properties to configure a
> BasicHttpContext for use with the HttpClient. As a workaround/alternative
> the user could fully initialize it's own AbstractHttpClient instance and
> pass it through the existing CACHED_HTTP_CLIENT option.
>
> On Wed, Feb 7, 2024 at 5:48=E2=80=AFAM Luis Silva
> <[email protected]> wrote:
>
>> Hi Robert,
>>
>>
>>
>> All help is welcome. If necessary, I=E2=80=99m available to help with te=
sting.
>>
>>
>>
>> Best Regard=E2=80=99s,
>>
>> Luis Silva
>>
>>
>>
>>
>>
>> *From:* robertlazarski <[email protected]>
>> *Sent:* Wednesday, 7 February 2024 15:29
>> *To:* [email protected]
>> *Subject:* Re: [Axis2] - Problem with authentication Negotiate
>>
>>
>>
>> It might take me a few days to look at this but I can probably help.
>>
>>
>>
>>
>>
>> I'm about to make commits that upgrade Axis2 from httpclient 4.x to 5.x
>> for the next release and this feature will need to be fixed for that too=
.
>>
>>
>>
>> On Wed, Feb 7, 2024 at 4:32=E2=80=AFAM Luis Silva <
>> [email protected]> wrote:
>>
>> Hi,
>>
>>
>>
>> I=E2=80=99m having a problem upgrading one application that uses axis2 v=
ersion
>> 1.6.0 to the 1.8.2 version.
>>
>> The situation is that I=E2=80=99m trying to connect to one IIS webservic=
e from a
>> linux server, and the IIS use in the authentication Negotiate. In versio=
n
>> 1.6.0 its working using a custom class to handle the request.
>>
>> I try to upgrade the client part to use axis2 1.8.2 but there are change=
s
>> on axis in HttpTransportProperties class that now doesn=E2=80=99t have
>> Authenticator. I=E2=80=99m trying to use the HttpTransportPropertiesImpl=
 class but
>> it=E2=80=99s not working.
>>
>> Using HttpTransportPropertiesImpl I can=E2=80=99t use the custom class t=
hat
>> handles the Negotiate authentication. I=E2=80=99m going to expose the si=
tuation
>> using the code.
>>
>>
>>
>> This is the code using axis2 1.6.0, and using wsdl2java to create the
>> stub
>>
>>
>>
>> *ProfilesStub stub =3D new ProfilesStub(wsURL);  // Stub created by
>> wsdl2java*
>>
>> *System.setProperty("java.security.auth.login.config",
>> kbr5LoginConfigFile); *
>>
>> *System.setProperty("java.security.krb5.conf", kbr5ConfigFile);*
>>
>> *System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");=
*
>>
>>
>>
>> *System.setProperty("sun.security.krb5.debug", "true");*
>>
>> *System.setProperty("sun.security.jgss.debug", "true");*
>>
>> *System.setProperty("java.security.debug",
>> "logincontext,policy,scl,gssloginconfig");*
>>
>>
>>
>> *AuthPolicy.unregisterAuthScheme("BASIC");*
>>
>> *AuthPolicy.unregisterAuthScheme("DIGEST");*
>>
>> *AuthPolicy.unregisterAuthScheme("NTLM");*
>>
>>
>>
>> *ArrayList authSchemes =3D new ArrayList();*
>>
>> *if ( AuthSchemeId.equals("Negotiate") )  // **=C3=9F** I=E2=80=99m usin=
g
>> AuthSchemeId=3DNegotiate*
>>
>> *{*
>>
>> *      AuthPolicy.registerAuthScheme("Negotiate",
>> NegotiateSchemeCustom.class);   //**=C3=9F** the custom class that handl=
es
>> the Negotiate authentication*
>>
>> *       authSchemes.add("Negotiate");*
>>
>> *}*
>>
>> *else*
>>
>> *{*
>>
>> * if ( AuthSchemeId.equals("Kerberos") )*
>>
>> *  {*
>>
>> *        AuthPolicy.registerAuthScheme("Kerberos",
>> KerberosSchemeCustom.class);*
>>
>> *        authSchemes.add("Kerberos");            }*
>>
>> *        else*
>>
>> *           throw new Exception("Invalid authentication scheme '" +
>> (AuthSchemeId =3D=3D null ? "(null)" : AuthSchemeId) + "'");*
>>
>> * }*
>>
>>
>>
>> *       HttpTransportProperties.Authenticator auth =3D new
>> HttpTransportProperties.Authenticator();*
>>
>> *        auth.setDomain(userDomain);*
>>
>> *        auth.setHost((new URL(wsURL)).getHost());*
>>
>> *        java.util.Properties properties =3D new java.util.Properties();=
*
>>
>> *        // absolute from the classpath*
>>
>> *        String configFileName =3D "wsURL.config";*
>>
>> *        try*
>>
>> *        {*
>>
>> *            properties.load(new
>> java.io.FileInputStream(configFileName));*
>>
>> *        }*
>>
>> *        catch ( Exception exception )*
>>
>> *        {*
>>
>> *            System.out.println("ERROR oppening file " + configFileName =
+
>> "--");*
>>
>> *            System.out.println("EX:" + exception.getMessage() +"--");*
>>
>> *        }*
>>
>> *        String username =3D properties.getProperty("username");*
>>
>> *        String password =3D properties.getProperty("password");*
>>
>>
>>
>> *        auth.setUsername(username);*
>>
>> *        auth.setPassword(password);*
>>
>>
>>
>> *        auth.setAuthSchemes(authSchemes);*
>>
>>
>>
>> *        HttpParams params =3D DefaultHttpParams.getDefaultParams();*
>>
>> *        params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY,
>> authSchemes);*
>>
>>
>>
>> *        Options options =3D stub._getServiceClient().getOptions();*
>>
>> *
>> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHEN=
TICATE,
>> auth);*
>>
>> *
>> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKE=
D,
>> Boolean.FALSE);*
>>
>> *
>> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.REUSE_=
HTTP_CLIENT,
>> "true");*
>>
>>
>>
>> *        stub._getServiceClient().setOptions(options);*
>>
>>
>>
>> *       GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); //
>> GetUserInfo class created by wsdl2java*
>>
>> *        userInfo.setSUserName(userName);*
>>
>> *        userInfo.setSDomain(domain);*
>>
>> *        userInfo.setSApplication(application);*
>>
>>
>>
>> *        GetUserInfoDocument getUserInfoDocument =3D
>> GetUserInfoDocument.Factory.newInstance();// GetUserInfoDocument class
>> created by wsdl2java*
>>
>>
>>
>> *       getUserInfoDocument.setGetUserInfo(userInfo); *
>>
>>
>>
>> *        GetUserInfoResponseDocument response =3D
>> stub.getUserInfo(getUserInfoDocument); // getUserInfo method to invoke,
>> GetUserInfoResponseDocument class created by wsdl2java*
>>
>> *        String userData =3D
>> response.getGetUserInfoResponse().getGetUserInfoResult().toString();*
>>
>>
>>
>> And using trace on the NegotiateSchemeCustom.class I confirm that this
>> class is used
>>
>> In the class
>>
>> *public NegotiateSchemeCustom () {*
>>
>> *        super();*
>>
>> *        state =3D UNINITIATED;*
>>
>> *        System.out.println("Created NegotiateSchemeCustom()");*
>>
>> *    }*
>>
>>
>>
>> The output
>>
>> Jan 31, 2024 5:09:09 PM
>> org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthSche=
me
>>
>> INFO: negotiate authentication scheme selected
>>
>> Created NegotiateSchemeCustom()
>>
>>
>>
>> And the invocation is successful.
>>
>>
>>
>> But when I try using 1.8.2 version
>>
>>
>>
>> *ProfilesStub stub =3D new ProfilesStub(wsURL);  // Stub created by
>> wsdl2java version 1.8.2*
>>
>> *System.setProperty("java.security.auth.login.config",
>> kbr5LoginConfigFile); *
>>
>> *System.setProperty("java.security.krb5.conf", kbr5ConfigFile);*
>>
>> *System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");=
*
>>
>>
>>
>> *System.setProperty("sun.security.krb5.debug", "true");*
>>
>> *System.setProperty("sun.security.jgss.debug", "true");*
>>
>> *System.setProperty("java.security.debug",
>> "logincontext,policy,scl,gssloginconfig");*
>>
>>
>>
>> *AuthPolicy.unregisterAuthScheme("BASIC");*
>>
>> *AuthPolicy.unregisterAuthScheme("DIGEST");*
>>
>> *AuthPolicy.unregisterAuthScheme("NTLM");*
>>
>>
>>
>> *ArrayList authSchemes =3D new ArrayList();*
>>
>> *if ( AuthSchemeId.equals("Negotiate") )  // **=C3=9F** I=E2=80=99m usin=
g
>> AuthSchemeId=3DNegotiate*
>>
>> *{*
>>
>> *      AuthPolicy.registerAuthScheme("Negotiate",
>> NegotiateSchemeCustom.class);   //**=C3=9F** the custom class that handl=
es
>> the Negotiate authentication, same as the 1.6.0*
>>
>> *       authSchemes.add("Negotiate");*
>>
>> *}*
>>
>> *else*
>>
>> *{*
>>
>> * if ( AuthSchemeId.equals("Kerberos") )*
>>
>> *  {*
>>
>> *        AuthPolicy.registerAuthScheme("Kerberos",
>> KerberosSchemeCustom.class);*
>>
>> *        authSchemes.add("Kerberos");            }*
>>
>> *        else*
>>
>> *           throw new Exception("Invalid authentication scheme '" +
>> (AuthSchemeId =3D=3D null ? "(null)" : AuthSchemeId) + "'");*
>>
>> * }*
>>
>>
>>
>> *       HttpTransportPropertiesImpl.Authenticator auth =3D new
>> HttpTransportPropertiesImpl.Authenticator(); // **=C3=9F** Using
>> HttpTransportPropertiesImpl that has Authenticator*
>>
>> *        auth.setDomain(userDomain);*
>>
>> *        auth.setHost((new URL(wsURL)).getHost());*
>>
>> *        java.util.Properties properties =3D new java.util.Properties();=
*
>>
>> *        // absolute from the classpath*
>>
>> *        String configFileName =3D "wsURL.config";*
>>
>> *        try*
>>
>> *        {*
>>
>> *            properties.load(new
>> java.io.FileInputStream(configFileName));*
>>
>> *        }*
>>
>> *        catch ( Exception exception )*
>>
>> *        {*
>>
>> *            System.out.println("ERROR oppening file " + configFileName =
+
>> "--");*
>>
>> *            System.out.println("EX:" + exception.getMessage() +"--");*
>>
>> *        }*
>>
>> *        String username =3D properties.getProperty("username");*
>>
>> *        String password =3D properties.getProperty("password");*
>>
>>
>>
>> *        auth.setUsername(username);*
>>
>> *        auth.setPassword(password);*
>>
>>
>>
>> *        auth.setAuthSchemes(authSchemes);*
>>
>>
>>
>> *        HttpParams params =3D DefaultHttpParams.getDefaultParams();*
>>
>> *        params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY,
>> authSchemes);*
>>
>>
>>
>> *        Options options =3D stub._getServiceClient().getOptions();*
>>
>> *
>> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHEN=
TICATE,
>> auth);*
>>
>> *
>> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKE=
D,
>> Boolean.FALSE);*
>>
>> *
>> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.REUSE_=
HTTP_CLIENT,
>> "true");*
>>
>>
>>
>> *        stub._getServiceClient().setOptions(options);*
>>
>>
>>
>> *       GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); //
>> GetUserInfo class created by wsdl2java*
>>
>> *        userInfo.setSUserName(userName);*
>>
>> *        userInfo.setSDomain(domain);*
>>
>> *        userInfo.setSApplication(application);*
>>
>>
>>
>> *        GetUserInfoDocument getUserInfoDocument =3D
>> GetUserInfoDocument.Factory.newInstance();// GetUserInfoDocument class
>> created by wsdl2java*
>>
>>
>>
>> *       getUserInfoDocument.setGetUserInfo(userInfo); *
>>
>>
>>
>> *        GetUserInfoResponseDocument response =3D
>> stub.getUserInfo(getUserInfoDocument); // getUserInfo method to invoke,
>> GetUserInfoResponseDocument class created by wsdl2java*
>>
>> *        String userData =3D
>> response.getGetUserInfoResponse().getGetUserInfoResult().toString();*
>>
>>
>>
>> My problems started, first is with HttpTransportPropertiesImpl, it does
>> not recognizes Negotiate schema.
>>
>> I checked the code and when the method getAuthPolicyPref of the
>> Authenticator class of the HttpTransportPropertiesImpl is called with
>> Negotiate its returns null.
>>
>> Where is part of the code of
>> axis2-1.8.2\modules\transport\http\src\org\apache\axis2\transport\http\i=
mpl\httpclient4\HttpTransportPropertiesImpl.java
>>
>> *@Override*
>>
>> *        public Object getAuthPolicyPref(String scheme) {*
>>
>> *            if (BASIC.equals(scheme)) {*
>>
>> *                return AuthPolicy.BASIC;*
>>
>> *            } else if (NTLM.equals(scheme)) {*
>>
>> *                return AuthPolicy.NTLM;*
>>
>> *            } else if (DIGEST.equals(scheme)) {*
>>
>> *                return AuthPolicy.DIGEST;*
>>
>> *            }*
>>
>> *            return null;*
>>
>> *        }*
>>
>> There is no Negotiate so it returns null and in the
>> AuthenticationStrategyImpl select method it causes one exception bellow,
>> because id is null
>>
>> *for (final String id: authPrefs) {*
>>
>> *            final Header challenge =3D
>> challenges.get(id.toLowerCase(Locale.ROOT));*
>>
>>
>>
>> My solution to this was to create a custom
>> HttpTransportPropertiesImplCustom that includes Negotiate and Kerberos
>>
>> This is my custom class.
>>
>> *public class HttpTransportPropertiesImplCustom extends
>> HttpTransportProperties {*
>>
>>
>>
>> *    protected HttpVersion httpVersion;*
>>
>>
>>
>> *    @Override*
>>
>> *    public void setHttpVersion(Object httpVerion) {*
>>
>> *        this.httpVersion =3D (HttpVersion) httpVerion;*
>>
>> *    }*
>>
>>
>>
>> *    @Override*
>>
>> *    public Object getHttpVersion() {*
>>
>> *        return this.httpVersion;*
>>
>> *    }*
>>
>>
>>
>> *    public static class Authenticator extends HTTPAuthenticator {*
>>
>>
>>
>> *        private int port =3D -1;*
>>
>> *        private String realm =3D null;*
>>
>>
>>
>> *        public static final String NTLM =3D "NTLM";*
>>
>> *        public static final String DIGEST =3D "Digest";*
>>
>> *        public static final String BASIC =3D "Basic";*
>>
>> *        public static final String SPNEGO =3D "Negotiate";*
>>
>> *        public static final String KERBEROS =3D "Kerberos";*
>>
>>
>>
>> *        public int getPort() {*
>>
>> *            return port;*
>>
>> *        }*
>>
>>
>>
>> *        public void setPort(int port) {*
>>
>> *            this.port =3D port;*
>>
>> *        }*
>>
>>
>>
>> *        public String getRealm() {*
>>
>> *            return realm;*
>>
>> *        }*
>>
>>
>>
>> *        public void setRealm(String realm) {*
>>
>> *            this.realm =3D realm;*
>>
>> *        }*
>>
>>
>>
>> *        @Override*
>>
>> *        public Object getAuthPolicyPref(String scheme) {*
>>
>> *            if (BASIC.equals(scheme)) {*
>>
>> *                return "Basic";*
>>
>> *            } else if (NTLM.equals(scheme)) {*
>>
>> *                return "NTLM";*
>>
>> *            } else if (DIGEST.equals(scheme)) {*
>>
>> *                return "Digest";*
>>
>> *            }*
>>
>> *            else if (SPNEGO.equals(scheme)) {*
>>
>> *                return "Negotiate";*
>>
>> *            }*
>>
>> *            else if (KERBEROS.equals(scheme)) {*
>>
>> *                return "Kerberos";*
>>
>> *            }*
>>
>> *            return null;*
>>
>> *        }*
>>
>> *    }*
>>
>>
>>
>> *}*
>>
>>
>>
>> With this now I have a valid schema for Negotiate but still can=E2=80=99=
t invoke
>> my custom class. Debugging I see that the class used when the schema is
>> Negotiate is SPNegoScheme of the package org.apache.http.impl.auth. It
>> ignores my NegotiateSchemeCustom.class
>>
>> I also tried to create a custom SPNegoScheme with the code of
>> NegotiateSchemeCustom.class but have other problems.
>>
>> But instead of trying to use this solution why my custom class
>>  NegotiateSchemeCustom.class isn=E2=80=99t used as the schema for Negoti=
ate?
>>
>> I=E2=80=99m I missing some new configuration?
>>
>>
>>
>> Any help/suggestion is appreciated .
>>
>>
>>
>> Best Regards,
>>
>> Luis Silva
>>
>>
>>
>>

--00000000000010c10d06118962df
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>To further clarify, see the example using CACHED_HTTP=
_CLIENT below; however that example is going to change slightly soon for ht=
tpclient 5.x. <br></div><div><br></div><div><a href=3D"https://axis.apache.=
org/axis2/java/core/docs/http-transport.html">https://axis.apache.org/axis2=
/java/core/docs/http-transport.html</a></div></div><br><div class=3D"gmail_=
quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, Feb 16, 2024 at 2:57=
=E2=80=AFPM robertlazarski &lt;<a href=3D"mailto:[email protected]">=
[email protected]</a>&gt; wrote:<br></div><blockquote class=3D"gmail=
_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204=
,204);padding-left:1ex"><div dir=3D"ltr"><div>I looked more into this and I=
 found AXIS2-4318 from 2012 which states the reason for dropping the suppor=
t of those features below. <br></div><div><br></div><div>Keep in mind that =
Axis2 1.6.x was the era of commons-httpclient 3.x. While 4.x is currently i=
n our trunk, these next several days I will be upgrading to 5.x so anything=
 we do here needs to work with the latest Apache httpclient release. <br></=
div><div><br></div><div><a href=3D"https://issues.apache.org/jira/browse/AX=
IS2-4318" target=3D"_blank">https://issues.apache.org/jira/browse/AXIS2-431=
8</a></div><div><p>3) drop authenticator preemptive authentication support<=
/p>

<p>Preemptive authentication is considered unsecure and is strongly discour=
aged. Moreover the code found in examples: <a href=3D"http://hc.apache.org/=
httpcomponents-client/examples.html" rel=3D"nofollow noopener" title=3D"Fol=
low link" target=3D"_blank">http://hc.apache.org/httpcomponents-client/exam=
ples.html</a>
 is no longer officially supported. Which means that we should drop=20
preemptive authentication support from the trunk; alternatively we can=20
allow a number of pluggable mechanisms to allow users to enable=20
preemptive auth. The user would have to provide HttpRequestInterceptor=20
and HttpResponseInterceptor implementations as well as a means to=20
properties to configure a BasicHttpContext for use with the HttpClient.=20
As a workaround/alternative the user could fully initialize it&#39;s own=20
AbstractHttpClient instance and pass it through the existing=20
CACHED_HTTP_CLIENT option.</p></div></div><br><div class=3D"gmail_quote"><d=
iv dir=3D"ltr" class=3D"gmail_attr">On Wed, Feb 7, 2024 at 5:48=E2=80=AFAM =
Luis  Silva &lt;[email protected]&gt; wrote:<br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex"><div>





<div lang=3D"PT">
<div>
<p class=3D"MsoNormal">Hi Robert,<u></u><u></u></p>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">All help is welcome. If necessa=
ry, I=E2=80=99m available to help with testing.<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Best Regard=E2=80=99s,<u></u><u=
></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Luis Silva<u></u><u></u></span>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
<div style=3D"border-width:1pt medium medium;border-style:solid none none;b=
order-color:rgb(225,225,225) currentcolor currentcolor;padding:3pt 0cm 0cm"=
>
<p class=3D"MsoNormal"><b><span lang=3D"EN-US">From:</span></b><span lang=
=3D"EN-US"> robertlazarski &lt;<a href=3D"mailto:[email protected]" =
target=3D"_blank">[email protected]</a>&gt;
<br>
<b>Sent:</b> Wednesday, 7 February 2024 15:29<br>
<b>To:</b> <a href=3D"mailto:[email protected]" target=3D"_blank">j=
[email protected]</a><br>
<b>Subject:</b> Re: [Axis2] - Problem with authentication Negotiate<u></u><=
u></u></span></p>
</div>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
<div>
<div>
<p class=3D"MsoNormal">It might take me a few days to look at this but I ca=
n probably help.
<u></u><u></u></p>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
</div>
<div>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><u></u>=C2=A0<u></u></span></p>
</div>
<div>
<p class=3D"MsoNormal">I&#39;m about to make commits that upgrade Axis2 fro=
m httpclient 4.x to 5.x for the next release and this feature will need to =
be fixed for that too.
<u></u><u></u></p>
</div>
</div>
<p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>
<div>
<div>
<p class=3D"MsoNormal">On Wed, Feb 7, 2024 at 4:32=E2=80=AFAM Luis Silva &l=
t;<a href=3D"mailto:[email protected]" target=3D"_blank">lu=
[email protected]</a>&gt; wrote:<u></u><u></u></p>
</div>
<blockquote style=3D"border-width:medium medium medium 1pt;border-style:non=
e none none solid;border-color:currentcolor currentcolor currentcolor rgb(2=
04,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class=3D"MsoNormal"><a name=3D"m_-6803131634443049061_m_5346911566523641=
790_m_6090071675751236050__Hlk139287544">Hi,</a><u></u><u></u></p>
<p class=3D"MsoNormal">=C2=A0<u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I=E2=80=99m having a problem up=
grading one application that uses axis2 version 1.6.0 to the 1.8.2 version.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">The situation is that I=E2=80=
=99m trying to connect to one IIS webservice from a linux server, and the I=
IS use in the authentication Negotiate. In version 1.6.0 its working
 using a custom class to handle the request.</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I try to upgrade the client par=
t to use axis2 1.8.2 but there are changes on axis in HttpTransportProperti=
es class that now doesn=E2=80=99t have Authenticator. I=E2=80=99m trying
 to use the HttpTransportPropertiesImpl class but it=E2=80=99s not working.=
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Using HttpTransportPropertiesIm=
pl I can=E2=80=99t use the custom class that handles the Negotiate authenti=
cation. I=E2=80=99m going to expose the situation using the code.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">This is the code using axis2 1.=
6.0, and using wsdl2java to create the stub
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0=C2=A0</span><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ProfilesStub stub =3D new Pr=
ofilesStub(wsURL);=C2=A0 // Stub created by wsdl2java</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.auth.login.config&quot;, kbr5LoginConfigFile);
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.krb5.conf&quot;, kbr5ConfigFile);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
ax.security.auth.useSubjectCredsOnly&quot;, &quot;false&quot;);</span></i><=
u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.krb5.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.jgss.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.debug&quot;, &quot;logincontext,policy,scl,gssloginconfig&quot;)=
;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;BASIC&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;DIGEST&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;NTLM&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ArrayList authSchemes =3D ne=
w ArrayList();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">if ( AuthSchemeId.equals(&qu=
ot;Negotiate&quot;) )=C2=A0 //
</span></i><i><span lang=3D"EN-US" style=3D"font-family:Wingdings">=C3=9F</=
span></i><i><span lang=3D"EN-US"> I=E2=80=99m using AuthSchemeId=3DNegotiat=
e</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 AuthPolicy.registerAuthScheme(&quot;Negotiate&quot;, NegotiateSchemeCus=
tom.class);=C2=A0=C2=A0 //</span></i><i><span lang=3D"EN-US" style=3D"font-=
family:Wingdings">=C3=9F</span></i><i><span lang=3D"EN-US">
 the custom class that handles the Negotiate authentication</span></i><u></=
u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 authSchemes.add(&quot;Negotiate&quot;);</span></i><u></u><u></u><=
/p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">}</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">else</span></i><u></u><u></u=
></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0if ( AuthSchemeId.equa=
ls(&quot;Kerberos&quot;) )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0 {</span></i><u></u><u=
></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0AuthPolicy.registerAuthScheme(&quot;Kerberos&quot;, Ke=
rberosSchemeCustom.class);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0authSchemes.add(&quot;Kerberos&quot;);=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0else</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0throw new Exception(&quot;Invalid au=
thentication scheme &#39;&quot; + (AuthSchemeId =3D=3D null ?
</span>&quot;(null)&quot; : AuthSchemeId) + &quot;&#39;&quot;);</i><u></u><=
u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0}</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 HttpTransportProperties.Authenticator auth =3D new HttpTransportP=
roperties.Authenticator();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setDomain(userDomain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setHost((new URL(wsURL)).getHost());</span></i><u></u>=
<u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 java.util.Properties properties =3D new java.util.Propertie=
s();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 // absolute from the classpath</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String configFileName =3D &quot;wsURL.config&quot;;</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 try</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 properties.load(new java.io.FileInp=
utStream(configFileName));</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 catch ( Exception exception )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;ERROR oppe=
ning file &quot; + configFileName + &quot;--&quot;);</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;EX:&quot; =
+ exception.getMessage() +&quot;--&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String username =3D properties.getProperty(&quot;username&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String password =3D properties.getProperty(&quot;password&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setUsername(username);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setPassword(password);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0auth.setAuthSchemes(authSchemes);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 HttpParams params =3D DefaultHttpParams.getDefaultParams();=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authSc=
hemes);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 Options options =3D stub._getServiceClient().getOptions();<=
/span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.AUTHENTICATE, auth);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.CHUNKED, Boolean.FALSE);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.REUSE_HTTP_CLIENT, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 stub._getServiceClient().setOptions(options);</span></i><u>=
</u><u></u></p>
<p class=3D"MsoNormal"><i>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
</i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); =
// GetUserInfo class created by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSUserName(userName);</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSDomain(domain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSApplication(application);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0GetUserInfoDocument getUserInfoDocument =3D GetUserInf=
oDocument.Factory.newInstance();// GetUserInfoDocument class created by wsd=
l2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0</span>getUserInfoDocument.setGetUserInfo(userInfo);
</i><u></u><u></u></p>
<p class=3D"MsoNormal"><i>=C2=A0</i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 GetUserInfoResponseDocument response =3D stub.getUserInfo(g=
etUserInfoDocument); // getUserInfo method to invoke, GetUserInfoResponseDo=
cument class created
 by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String userData =3D response.getGetUserInfoResponse().getGe=
tUserInfoResult().toString();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">And using trace on the Negotiat=
eSchemeCustom.class I confirm that this class is used</span><u></u><u></u><=
/p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">In the class
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">public NegotiateSchemeCustom=
 () {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 super();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 state =3D UNINITIATED;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 System.out.println(&quot;Created NegotiateSchemeCustom()&qu=
ot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">The output</span><u></u><u></u>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Jan 31, 2024 5:09:09 PM org.apa=
che.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme</span><=
u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">INFO: negotiate authentication =
scheme selected</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Created NegotiateSchemeCustom()=
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">And the invocation is successfu=
l.</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">But when I try using 1.8.2 vers=
ion</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ProfilesStub stub =3D new Pr=
ofilesStub(wsURL);=C2=A0 // Stub created by wsdl2java version 1.8.2</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.auth.login.config&quot;, kbr5LoginConfigFile);
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.krb5.conf&quot;, kbr5ConfigFile);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
ax.security.auth.useSubjectCredsOnly&quot;, &quot;false&quot;);</span></i><=
u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.krb5.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;sun=
.security.jgss.debug&quot;, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty(&quot;jav=
a.security.debug&quot;, &quot;logincontext,policy,scl,gssloginconfig&quot;)=
;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;BASIC&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;DIGEST&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch=
eme(&quot;NTLM&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">ArrayList authSchemes =3D ne=
w ArrayList();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">if ( AuthSchemeId.equals(&qu=
ot;Negotiate&quot;) )=C2=A0 //
</span></i><i><span lang=3D"EN-US" style=3D"font-family:Wingdings">=C3=9F</=
span></i><i><span lang=3D"EN-US"> I=E2=80=99m using AuthSchemeId=3DNegotiat=
e</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0 AuthPolicy.registerAuthScheme(&quot;Negotiate&quot;, NegotiateSchemeCus=
tom.class);=C2=A0=C2=A0 //</span></i><i><span lang=3D"EN-US" style=3D"font-=
family:Wingdings">=C3=9F</span></i><i><span lang=3D"EN-US">
 the custom class that handles the Negotiate authentication, same as the 1.=
6.0</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 authSchemes.add(&quot;Negotiate&quot;);</span></i><u></u><u></u><=
/p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">}</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">else</span></i><u></u><u></u=
></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">{</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0if ( AuthSchemeId.equa=
ls(&quot;Kerberos&quot;) )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0 {</span></i><u></u><u=
></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0AuthPolicy.registerAuthScheme(&quot;Kerberos&quot;, Ke=
rberosSchemeCustom.class);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0authSchemes.add(&quot;Kerberos&quot;);=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0else</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0throw new Exception(&quot;Invalid au=
thentication scheme &#39;&quot; + (AuthSchemeId =3D=3D null ? &quot;(null)&=
quot; : AuthSchemeId) + &quot;&#39;&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0}</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0 HttpTransportPropertiesImpl.Authenticator auth =3D new HttpTransp=
ortPropertiesImpl.Authenticator(); //
</span></i><i><span lang=3D"EN-US" style=3D"font-family:Wingdings">=C3=9F</=
span></i><i><span lang=3D"EN-US"> Using HttpTransportPropertiesImpl that ha=
s Authenticator</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setDomain(userDomain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setHost((new URL(wsURL)).getHost());</span></i><u></u>=
<u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 java.util.Properties properties =3D new java.util.Propertie=
s();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 // absolute from the classpath</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String configFileName =3D &quot;wsURL.config&quot;;</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 try</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 properties.load(new java.io.FileInp=
utStream(configFileName));</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 catch ( Exception exception )</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;ERROR oppe=
ning file &quot; + configFileName + &quot;--&quot;);</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println(&quot;EX:&quot; =
+ exception.getMessage() +&quot;--&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String username =3D properties.getProperty(&quot;username&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String password =3D properties.getProperty(&quot;password&q=
uot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setUsername(username);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 auth.setPassword(password);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0auth.setAuthSchemes(authSchemes);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 HttpParams params =3D DefaultHttpParams.getDefaultParams();=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authSc=
hemes);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 Options options =3D stub._getServiceClient().getOptions();<=
/span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.AUTHENTICATE, auth);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.CHUNKED, Boolean.FALSE);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 options.setProperty(org.apache.axis2.transport.http.HTTPCon=
stants.REUSE_HTTP_CLIENT, &quot;true&quot;);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 stub._getServiceClient().setOptions(options);</span></i><u>=
</u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0GetUserInfo userInfo =3D GetUserInfo.Factory.newInstance(); =
// GetUserInfo class created by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSUserName(userName);</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSDomain(domain);</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 userInfo.setSApplication(application);</span></i><u></u><u>=
</u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0GetUserInfoDocument getUserInfoDocument =3D GetUserInf=
oDocument.Factory.newInstance();// GetUserInfoDocument class created by wsd=
l2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0getUserInfoDocument.setGetUserInfo(userInfo);
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 GetUserInfoResponseDocument response =3D stub.getUserInfo(g=
etUserInfoDocument); // getUserInfo method to invoke, GetUserInfoResponseDo=
cument class created
 by wsdl2java</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 String userData =3D response.getGetUserInfoResponse().getGe=
tUserInfoResult().toString();</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">My problems started, first is w=
ith HttpTransportPropertiesImpl, it does not recognizes Negotiate schema.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I checked the code and when the=
 method getAuthPolicyPref of the Authenticator class of the HttpTransportPr=
opertiesImpl is called with Negotiate its returns null.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Where is part of the code of ax=
is2-1.8.2\modules\transport\http\src\org\apache\axis2\transport\http\impl\h=
ttpclient4\HttpTransportPropertiesImpl.java</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">@Override</span></i><u></u><=
u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public Object getAuthPolicyPref(String scheme) {</span></i>=
<u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (BASIC.equals(scheme)) {</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return Auth=
Policy.BASIC;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (NTLM.equals(scheme)) {</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return Auth=
Policy.NTLM;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (DIGEST.equals(scheme)) {=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return Auth=
Policy.DIGEST;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return null;</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">There is no Negotiate so it ret=
urns null and in the AuthenticationStrategyImpl select method it causes one=
 exception bellow, because id is null</span><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">for (final String id: authPr=
efs) {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 final Header challenge =3D challeng=
es.get(id.toLowerCase(Locale.ROOT));</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">My solution to this was to crea=
te a custom HttpTransportPropertiesImplCustom that includes Negotiate and K=
erberos</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">This is my custom class.</span>=
<u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">public class HttpTransportPr=
opertiesImplCustom extends HttpTransportProperties {</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 protected=
 HttpVersion httpVersion;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 @Override=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 public vo=
id setHttpVersion(Object httpVerion) {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 this.httpVersion =3D (HttpVersion) httpVerion;</span></i><u=
></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 @Override=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 public Ob=
ject getHttpVersion() {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 return this.httpVersion;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 public st=
atic class Authenticator extends HTTPAuthenticator {</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 private int port =3D -1;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 private String realm =3D null;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0public static final String NTLM =3D &quot;NTLM&quot;;<=
/span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String DIGEST =3D &quot;Digest&quot;;</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String BASIC =3D &quot;Basic&quot;;</sp=
an></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String SPNEGO =3D &quot;Negotiate&quot;=
;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public static final String KERBEROS =3D &quot;Kerberos&quot=
;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public int getPort() {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return port;</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public void setPort(int port) {</span></i><u></u><u></u></p=
>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 this.port =3D port;</span></i><u></=
u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public String getRealm() {</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return realm;</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public void setRealm(String realm) {</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 this.realm =3D realm;</span></i><u>=
</u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 @Override</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 public Object getAuthPolicyPref(String scheme) {</span></i>=
<u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (BASIC.equals(scheme)) {</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Basic&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (NTLM.equals(scheme)) {</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;NTLM&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (DIGEST.equals(scheme)) {=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Digest&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else if (SPNEGO.equals(scheme)) {</=
span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Negotiate&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else if (KERBEROS.equals(scheme)) {=
</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return &quo=
t;Kerberos&quot;;</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return null;</span></i><u></u><u></=
u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 }</span></i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0=C2=A0=C2=A0 }</span><=
/i><u></u><u></u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">=C2=A0</span></i><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><i><span lang=3D"EN-US">}</span></i><u></u><u></u></=
p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">With this now I have a valid sc=
hema for Negotiate but still can=E2=80=99t invoke my custom class. Debuggin=
g I see that the class used when the schema is Negotiate is
 SPNegoScheme of the package org.apache.http.impl.auth. It ignores my Negot=
iateSchemeCustom.class</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I also tried to create a custom=
 SPNegoScheme with the code of NegotiateSchemeCustom.class but have other p=
roblems.
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">But instead of trying to use th=
is solution why my custom class =C2=A0NegotiateSchemeCustom.class isn=E2=80=
=99t used as the schema for Negotiate?</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I=E2=80=99m I missing some new =
configuration?
</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Any help/suggestion is apprecia=
ted .</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Best Regards,</span><u></u><u><=
/u></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Luis Silva</span><u></u><u></u>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">=C2=A0</span><u></u><u></u></p>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>

</div></blockquote></div>
</blockquote></div>

--00000000000010c10d06118962df--