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 <<a href=3D"mailto:[email protected]">= [email protected]</a>> 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'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 <[email protected]> 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 <<a href=3D"mailto:[email protected]" = target=3D"_blank">[email protected]</a>> <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'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>> 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("jav= a.security.auth.login.config", kbr5LoginConfigFile); </span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("jav= a.security.krb5.conf", kbr5ConfigFile);</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("jav= ax.security.auth.useSubjectCredsOnly", "false");</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("sun= .security.krb5.debug", "true");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("sun= .security.jgss.debug", "true");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("jav= a.security.debug", "logincontext,policy,scl,gssloginconfig")= ;</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("BASIC");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch= eme("DIGEST");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch= eme("NTLM");</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") )=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("Negotiate", 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("Negotiate");</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("Kerberos") )</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("Kerberos", 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("Kerberos");=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("Invalid au= thentication scheme '" + (AuthSchemeId =3D=3D null ? </span>"(null)" : AuthSchemeId) + "'");</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 "wsURL.config";</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("ERROR oppe= ning file " + 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=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println("EX:" = + exception.getMessage() +"--");</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("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("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, "true");</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("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("jav= a.security.auth.login.config", kbr5LoginConfigFile); </span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("jav= a.security.krb5.conf", kbr5ConfigFile);</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("jav= ax.security.auth.useSubjectCredsOnly", "false");</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("sun= .security.krb5.debug", "true");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("sun= .security.jgss.debug", "true");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">System.setProperty("jav= a.security.debug", "logincontext,policy,scl,gssloginconfig")= ;</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("BASIC");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch= eme("DIGEST");</span></i><u></u><u></u></p> <p class=3D"MsoNormal"><i><span lang=3D"EN-US">AuthPolicy.unregisterAuthSch= eme("NTLM");</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") )=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("Negotiate", 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("Negotiate");</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("Kerberos") )</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("Kerberos", 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("Kerberos");=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("Invalid au= thentication scheme '" + (AuthSchemeId =3D=3D null ? "(null)&= quot; : AuthSchemeId) + "'");</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 "wsURL.config";</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("ERROR oppe= ning file " + 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=C2=A0=C2=A0=C2=A0=C2=A0 System.out.println("EX:" = + exception.getMessage() +"--");</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("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("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, "true");</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 "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 public static final String DIGEST =3D "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 public static final String BASIC =3D "Basic";</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 "Negotiate"= ;</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 "Kerberos"= ;;</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";</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";</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";</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";</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";</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--