Hi,
Any idea why this problem is coming up? is there an issue on how i am
accessing the API calls.
Java client code for restful APIs would have been implemented before. is
there a chance for me to have a look at these examples.
-Ram
On Fri, Jun 19, 2009 at 1:40 AM, Ram Mohan <ram.mo...@customerxps.com>wrote:
> Changed the subject to an appropriate one
>
> ---------- Forwarded message ----------
> From: Ram Mohan <ram.mo...@customerxps.com>
> Date: Fri, Jun 19, 2009 at 12:16 AM
> Subject: Re: [cas-dev] Need help in authenticating without using login UI
> To: cas-dev@lists.jasig.org
>
>
> Thanks Andrew for these pointers. they cleared my concepts about cas and
> how they handle security.
>
> I have a new problem. I implemented a basic Java Restful Client.
> while trying to get the TGT, I am getting the following error
> java.lang.IllegalStateException: The Web form cannot be parsed as no fresh
> content is available. If this entity has been already read once, caching of
> the entity is required
>
> i thought i could be trying to generate a TGT for the user, who already
> have a active TGT. but, this wasn't the case.
>
> I am attaching the log and also the java client code. Can someone point me
> where i am going wrong.
>
> -Ram
>
>
>
> On Mon, Jun 15, 2009 at 8:48 PM, Andrew Feller <afel...@lsu.edu> wrote:
>
>> You might also find the white papers on the actual URL protocols useful,
>> too.
>>
>> http://www.jasig.org/cas/protocol
>>
>>
>> On 6/15/09 10:10 AM, "Ram Mohan" <ram.mo...@customerxps.com> wrote:
>>
>> Thanks Andrew,
>> I will go through them.
>>
>> -Ram
>>
>> On Mon, Jun 15, 2009 at 7:47 PM, Andrew Feller <afel...@lsu.edu> wrote:
>>
>> Ram,
>>
>> Two things:
>>
>> 1. I think you should spend some time reading about the CAS architecture
>> so you how it works.
>>
>> CAS 1 architecture: http://www.jasig.org/cas/cas1-architecture
>> CAS 2 architecture: http://www.jasig.org/cas/cas2-architecture
>> Proxy authentication: http://www.jasig.org/cas/proxy-authentication
>>
>> The TGT is some information granted by the CAS server and retained by
>> the user as proof the user logged in.
>> The ST is some information granted by the CAS server, passed along by
>> the user, and verified by CAS client protecting application to ensure user
>> logged in.
>>
>> 2. Check out the RESTful API
>>
>> RESTful API: http://www.ja-sig.org/wiki/display/CASUM/RESTful+API
>>
>> HTH,
>> A-
>>
>>
>> On 6/15/09 8:51 AM, "Ram Mohan" <ram.mo...@customerxps.com <
>> http://ram.mo...@customerxps.com> > wrote:
>>
>> Hi,
>>
>> I am a newbie to CAS and security. In my case, CAS Server 3.3.2 + Acegi
>> CAS Client is used for Authentication.
>> I took up a task of providing API for username/password authentication
>> i.e, MyClass.authenticate(Credentials credentials).
>> I think I dont even need to generate a Service Ticket. TGT cookie is
>> enough.
>>
>> For me, its simply looking like authentication without the login UI and
>> sending the credentials as parameters in the request.
>> am i going in the right direction? also, i think application of this sort
>> would already have been implemented as this is a common scenario. Any
>> pointers in this regard would be very helpful
>>
>> Thanks in advance,
>> Ram
>>
>>
>> --
>> Andrew Feller, Analyst
>> LSU University Information Services
>> 200 Frey Computing Services Center
>> Baton Rouge, LA 70803
>> Office: 225.578.3737
>> Fax: 225.578.6400
>>
>> --
>> You are currently subscribed to cas-dev@lists.jasig.org as:
>> ram.mo...@customerxps.com
>>
>>
>> To unsubscribe, change settings or access archives, see
>> http://www.ja-sig.org/wiki/display/JSG/cas-dev
>>
>>
>
>
--
You are currently subscribed to cas-dev@lists.jasig.org as:
arch...@mail-archive.com
To unsubscribe, change settings or access archives, see
http://www.ja-sig.org/wiki/display/JSG/cas-dev
2009-06-19 00:05:37,993 DEBUG
[org.springframework.beans.factory.support.DefaultListableBeanFactory] -
<Creating instance of bean 'ticketResource'>
2009-06-19 00:05:37,994 DEBUG
[org.springframework.beans.factory.annotation.InjectionMetadata] - <Processing
injected field of bean 'ticketResource': AutowiredFieldElement for private
org.jasig.cas.CentralAuthenticationService
org.jasig.cas.integration.restlet.TicketResource.centralAuthenticationService>
2009-06-19 00:05:37,994 DEBUG
[org.springframework.beans.factory.support.DefaultListableBeanFactory] -
<Returning cached instance of singleton bean 'centralAuthenticationService'>
2009-06-19 00:05:37,994 DEBUG
[org.springframework.beans.factory.support.DefaultListableBeanFactory] -
<Finished creating instance of bean 'ticketResource'>
2009-06-19 00:05:37,994 DEBUG
[org.jasig.cas.integration.restlet.TicketResource] - <Obtaining credentials...>
2009-06-19 00:05:37,994 DEBUG
[com.noelios.restlet.ext.spring.RestletFrameworkServlet] - <Could not complete
request>
java.lang.IllegalStateException: The Web form cannot be parsed as no fresh
content is available. If this entity has been already read once, caching of the
entity is required
at com.noelios.restlet.util.FormUtils.parse(FormUtils.java:95)
at com.noelios.restlet.Engine.parse(Engine.java:975)
at org.restlet.data.Form.<init>(Form.java:74)
at org.restlet.data.Form.<init>(Form.java:119)
at org.restlet.data.Message.getEntityAsForm(Message.java:179)
at
org.jasig.cas.integration.restlet.TicketResource.acceptRepresentation(TicketResource.java:56)
at org.restlet.resource.Resource.post(Resource.java:678)
at org.restlet.resource.Resource.handlePost(Resource.java:527)
at org.restlet.Finder.handle(Finder.java:344)
at org.restlet.Filter.doHandle(Filter.java:137)
at org.restlet.Filter.handle(Filter.java:180)
at org.restlet.Router.handle(Router.java:471)
at
com.noelios.restlet.ext.servlet.ServletConverter.service(ServletConverter.java:130)
at
com.noelios.restlet.ext.spring.RestletFrameworkServlet.doService(RestletFrameworkServlet.java:92)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.inspektr.common.web.ClientInfoThreadLocalFilter.doFilterInternal(ClientInfoThreadLocalFilter.java:48)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
2009-06-19 00:05:37,995 DEBUG
[org.springframework.web.context.support.XmlWebApplicationContext] -
<Publishing event in context
[org.springframework.web.context.support.xmlwebapplicationcont...@1abbec4]:
ServletRequestHandledEvent: url=[//cas-server-webapp-3.3/v1/tickets/];
client=[127.0.0.1]; method=[POST]; servlet=[restlet]; session=[null];
user=[null]; time=[3ms]; status=[failed: java.lang.IllegalStateException: The
Web form cannot be parsed as no fresh content is available. If this entity has
been already read once, caching of the entity is required]>
2009-06-19 00:05:37,995 DEBUG
[org.springframework.web.context.support.XmlWebApplicationContext] -
<Publishing event in context
[org.springframework.web.context.support.xmlwebapplicationcont...@1cbda0a]:
ServletRequestHandledEvent: url=[//cas-server-webapp-3.3/v1/tickets/];
client=[127.0.0.1]; method=[POST]; servlet=[restlet]; session=[null];
user=[null]; time=[3ms]; status=[failed: java.lang.IllegalStateException: The
Web form cannot be parsed as no fresh content is available. If this entity has
been already read once, caching of the entity is required]>
2009-06-19 00:05:38,026 DEBUG
[org.springframework.beans.factory.support.DefaultListableBeanFactory] -
<Creating instance of bean 'ticketGrantingTicketResource'>
2009-06-19 00:05:38,027 DEBUG
[org.springframework.beans.factory.annotation.InjectionMetadata] - <Processing
injected field of bean 'ticketGrantingTicketResource': AutowiredFieldElement
for private org.jasig.cas.CentralAuthenticationService
org.jasig.cas.integration.restlet.TicketGrantingTicketResource.centralAuthenticationService>
2009-06-19 00:05:38,027 DEBUG
[org.springframework.beans.factory.support.DefaultListableBeanFactory] -
<Returning cached instance of singleton bean 'centralAuthenticationService'>
2009-06-19 00:05:38,027 DEBUG
[org.springframework.beans.factory.support.DefaultListableBeanFactory] -
<Finished creating instance of bean 'ticketGrantingTicketResource'>
2009-06-19 00:05:38,027 DEBUG
[org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Attempting to retrieve
ticket [null]>
2009-06-19 00:05:38,027 ERROR
[org.jasig.cas.integration.restlet.TicketGrantingTicketResource] -
<org.jasig.cas.ticket.InvalidTicketException>
org.jasig.cas.ticket.InvalidTicketException
at
org.jasig.cas.CentralAuthenticationServiceImpl.grantServiceTicket(CentralAuthenticationServiceImpl.java:177)
at
org.jasig.cas.CentralAuthenticationServiceImpl.grantServiceTicket(CentralAuthenticationServiceImpl.java:245)
at
org.jasig.cas.integration.restlet.TicketGrantingTicketResource.acceptRepresentation(TicketGrantingTicketResource.java:67)
at org.restlet.resource.Resource.post(Resource.java:678)
at org.restlet.resource.Resource.handlePost(Resource.java:527)
at org.restlet.Finder.handle(Finder.java:344)
at org.restlet.Filter.doHandle(Filter.java:137)
at org.restlet.Filter.handle(Filter.java:180)
at org.restlet.Router.handle(Router.java:471)
at
com.noelios.restlet.ext.servlet.ServletConverter.service(ServletConverter.java:130)
at
com.noelios.restlet.ext.spring.RestletFrameworkServlet.doService(RestletFrameworkServlet.java:92)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.inspektr.common.web.ClientInfoThreadLocalFilter.doFilterInternal(ClientInfoThreadLocalFilter.java:48)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
2009-06-19 00:05:38,028 DEBUG
[com.noelios.restlet.ext.spring.RestletFrameworkServlet] - <Successfully
completed request>
2009-06-19 00:05:38,028 DEBUG
[org.springframework.web.context.support.XmlWebApplicationContext] -
<Publishing event in context
[org.springframework.web.context.support.xmlwebapplicationcont...@1abbec4]:
ServletRequestHandledEvent: url=[//cas-server-webapp-3.3/v1/tickets/null];
client=[127.0.0.1]; method=[POST]; servlet=[restlet]; session=[null];
user=[null]; time=[2ms]; status=[OK]>
2009-06-19 00:05:38,028 DEBUG
[org.springframework.web.context.support.XmlWebApplicationContext] -
<Publishing event in context
[org.springframework.web.context.support.xmlwebapplicationcont...@1cbda0a]:
ServletRequestHandledEvent: url=[//cas-server-webapp-3.3/v1/tickets/null];
client=[127.0.0.1]; method=[POST]; servlet=[restlet]; session=[null];
user=[null]; time=[2ms]; status=[OK]>
package com.cxps.authenticator;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
public class Authenticator {
public final String CAS_CONTEXT = "cas-server-webapp-3.3";
public final String RESTLET_SERVLET = "/v1/tickets/";
private static HttpClient client = null;
private static PostMethod method = null;
public Authenticator(){
client = new HttpClient();
}
public String getTGTString(String CASServiceURL, String username, String password){
String TGTString = null;
int returnCode;
CASServiceURL = CASServiceURL + "/"+ CAS_CONTEXT + RESTLET_SERVLET;
PostMethod method = new PostMethod(CASServiceURL);
//method.addParameter("username", username);
//method.addParameter("password",password);
method.addRequestHeader("Content-type", "application/x-www-form-urlencoded");
method.addRequestHeader("Accept", "text/plain");
try {
returnCode = client.executeMethod(method);
if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
System.err.println("The Post method is not implemented by this URI");
} else {
System.out.println("Return Code of the Post Method: "+ returnCode);
System.out.println(method.getResponseBodyAsString());
//String location = method.getResponseHeader("location").toString();
//TGTString = location.substring(location.lastIndexOf('/')+1);
System.out.println("The TGTString obtained is"+TGTString);
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
method.releaseConnection();
}
return TGTString;
}
public String getServiceTicket(String CASServiceURL, String TGT, String service){
String ServiceTicket = null;
int returnCode;
CASServiceURL = CASServiceURL + "/"+ CAS_CONTEXT + RESTLET_SERVLET + TGT;
PostMethod method = new PostMethod(CASServiceURL);
method.addParameter("service", service);
method.addRequestHeader("Content-type", "application/x-www-form-urlencoded");
method.addRequestHeader("Accept", "text/plain");
try {
returnCode = client.executeMethod(method);
if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
System.err.println("The Post method is not implemented by this URI");
} else {
System.out.println("Return Code of the Post Method: "+ returnCode);
ServiceTicket = method.getResponseBodyAsString();
System.out.println("The ST String obtained is: "+ ServiceTicket);
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
method.releaseConnection();
}
return ServiceTicket;
}
public static void main(String[] args){
Authenticator auth = new Authenticator();
String TGT = auth.getTGTString("https://localhost:8443/", "victor", "victor123$");
System.out.println("TGT string is "+ TGT);
String ST = auth.getServiceTicket("https://localhost:8443/", TGT, "http://localhost:5000/Seer-Gab/noesis-process");
System.out.println("ServiceTicket is "+ ST);
}
}