<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Propagating web application credentials through JAX-WS and Spring Security</title>
	<atom:link href="http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/</link>
	<description>software - technology - politics - random rants</description>
	<lastBuildDate>Wed, 24 Nov 2010 22:16:08 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: admin</title>
		<link>http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-42</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Tue, 09 Feb 2010 01:10:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-42</guid>
		<description>Yes, that certainly sounds prudent.  I am currently looking at preparing a system in development for production readiness with additonal security and optimizing authentication to be less &quot;chatty.&quot; The system has hundreds of web service calls in short intervals and it is currently providing the username and password to the web service with each request.  Those are then validated against a separate LDAP backend using a bind operation.  In other words, not terribly secure and it&#039;s doing too much work also.

One thing I am considering is generating an encryption key at start up of an authentication server known only to it.  When an authentication operation completes, the result would be a ticket.  The ticket would basically be an encrypted value representing the username and additional information to facilitate expiration and uniqueness over time (any token that doesn&#039;t change is inherently insecure).  When provided with that information, the authentication service would do a lookup by the decrypted username to retrieve cached principal information.  The principal cache would either be refreshed at a time interval or updated through event propagation.

Ideally, I would like to find an open source ticketing server that plays well with all the various technologies in the system (Mule, Spring, JAX-WS, CXF, etc.).   I feel like I understand the difficulties of security conceptually, but I always try to leverage experts when possible.  Just keeping up with what encryption algorithms to employ is a moving target with all the continual advances in attacks.</description>
		<content:encoded><![CDATA[<p>Yes, that certainly sounds prudent.  I am currently looking at preparing a system in development for production readiness with additonal security and optimizing authentication to be less &#8220;chatty.&#8221; The system has hundreds of web service calls in short intervals and it is currently providing the username and password to the web service with each request.  Those are then validated against a separate LDAP backend using a bind operation.  In other words, not terribly secure and it&#8217;s doing too much work also.</p>
<p>One thing I am considering is generating an encryption key at start up of an authentication server known only to it.  When an authentication operation completes, the result would be a ticket.  The ticket would basically be an encrypted value representing the username and additional information to facilitate expiration and uniqueness over time (any token that doesn&#8217;t change is inherently insecure).  When provided with that information, the authentication service would do a lookup by the decrypted username to retrieve cached principal information.  The principal cache would either be refreshed at a time interval or updated through event propagation.</p>
<p>Ideally, I would like to find an open source ticketing server that plays well with all the various technologies in the system (Mule, Spring, JAX-WS, CXF, etc.).   I feel like I understand the difficulties of security conceptually, but I always try to leverage experts when possible.  Just keeping up with what encryption algorithms to employ is a moving target with all the continual advances in attacks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Trent</title>
		<link>http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-41</link>
		<dc:creator>Trent</dc:creator>
		<pubDate>Mon, 08 Feb 2010 01:37:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-41</guid>
		<description>I completely agree with you.  Without SSL, token passing in any way is not advised.  And creating a pre-shared token is virtually useless if someone hacks the front end web server.  But, so is SSL client certificates, assuming the system is &quot;rooted&quot;.

I would say, that one of the best methods, is a combination of SSL, and a token that is generated on the farthest back SOA server from the DMZ, after the user has been authenticated with username/password, or some other method.  That way, the &quot;authenticated&quot; state is established by a more secure server, and the username and password aren&#039;t continually being sent back and forth, which is ideal.

Any thoughts?</description>
		<content:encoded><![CDATA[<p>I completely agree with you.  Without SSL, token passing in any way is not advised.  And creating a pre-shared token is virtually useless if someone hacks the front end web server.  But, so is SSL client certificates, assuming the system is &#8220;rooted&#8221;.</p>
<p>I would say, that one of the best methods, is a combination of SSL, and a token that is generated on the farthest back SOA server from the DMZ, after the user has been authenticated with username/password, or some other method.  That way, the &#8220;authenticated&#8221; state is established by a more secure server, and the username and password aren&#8217;t continually being sent back and forth, which is ideal.</p>
<p>Any thoughts?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: admin</title>
		<link>http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-40</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Sun, 07 Feb 2010 16:12:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-40</guid>
		<description>Trent, I have seen this done about every way you can do it, most of which made me cringe when I studied the implementation and gained an understanding of its ramifications.

I have seen cases where the username was the only thing that meant anything, and the token was essentially a pre-shared value known to the client and server and written into Java code (identical for all users!).  That type of implementation would only even approach feasibility if the users were never logging in themselves, but some sort of automated system was using the web service on their behalf.

Clearly, a token generated by an authentication of principal/credential on the first request is a much better system.  I would still caution against using that approach without an SSL transport unless you have expiration rules built into that token (such as a nonce).

Although there are definitely holes in some of the approaches I have seen, most of them could be rationalized if they employed some sort of securing of the message, be it an SSL transport, message encryption, or both.  I know in many cases, the message itself might not be secure due to the nature of the business--something like a pay-per-result public web service with fairly mundane inputs and outputs.  In this case, the truly secure data is the username and authentication information as those are tied to billable events.  These are the cases where expiring tokens and other aggressive strategies should definitely be employed.

As with all things security, I would advise looking at your implementation and trying to think of the worst things that could go wrong.  If you are working for a high-profile organization or project, it is just a matter of time until someone exploits it.  I have even seen security holes intentionally exploited by integration partners because it made the implementation easier.

Best of luck, and feel free to comment again.  I hope this was helpful.</description>
		<content:encoded><![CDATA[<p>Trent, I have seen this done about every way you can do it, most of which made me cringe when I studied the implementation and gained an understanding of its ramifications.</p>
<p>I have seen cases where the username was the only thing that meant anything, and the token was essentially a pre-shared value known to the client and server and written into Java code (identical for all users!).  That type of implementation would only even approach feasibility if the users were never logging in themselves, but some sort of automated system was using the web service on their behalf.</p>
<p>Clearly, a token generated by an authentication of principal/credential on the first request is a much better system.  I would still caution against using that approach without an SSL transport unless you have expiration rules built into that token (such as a nonce).</p>
<p>Although there are definitely holes in some of the approaches I have seen, most of them could be rationalized if they employed some sort of securing of the message, be it an SSL transport, message encryption, or both.  I know in many cases, the message itself might not be secure due to the nature of the business&#8211;something like a pay-per-result public web service with fairly mundane inputs and outputs.  In this case, the truly secure data is the username and authentication information as those are tied to billable events.  These are the cases where expiring tokens and other aggressive strategies should definitely be employed.</p>
<p>As with all things security, I would advise looking at your implementation and trying to think of the worst things that could go wrong.  If you are working for a high-profile organization or project, it is just a matter of time until someone exploits it.  I have even seen security holes intentionally exploited by integration partners because it made the implementation easier.</p>
<p>Best of luck, and feel free to comment again.  I hope this was helpful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Trent</title>
		<link>http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-39</link>
		<dc:creator>Trent</dc:creator>
		<pubDate>Sun, 07 Feb 2010 09:27:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.timgarrett.net/2008/07/03/thoughts-on-web-service-security-in-an-enterprise-software-environment/#comment-39</guid>
		<description>You said: 
&lt;blockquote&gt;
I have seen some pretty primitive attitudes toward web service security‚Äìthings like non-SSL transports combined with a simple authentication token that never changes. This is exactly the kind of recklessness I wanted to avoid in my services.
&lt;/blockquote&gt;
What exactly do you mean by the bit about &quot;simple authentication token&quot;?

Do you mean like a mutually defined token, used on the web service, and the client?

Or do you mean a token generated by an authentication of principal/credential passing on the first request?

Thanks.</description>
		<content:encoded><![CDATA[<p>You said: </p>
<blockquote><p>
I have seen some pretty primitive attitudes toward web service security‚Äìthings like non-SSL transports combined with a simple authentication token that never changes. This is exactly the kind of recklessness I wanted to avoid in my services.
</p></blockquote>
<p>What exactly do you mean by the bit about &#8220;simple authentication token&#8221;?</p>
<p>Do you mean like a mutually defined token, used on the web service, and the client?</p>
<p>Or do you mean a token generated by an authentication of principal/credential passing on the first request?</p>
<p>Thanks.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

