cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject svn commit: r915457 - in /websites/production/cxf/content: cache/docs.pageCache docs/standardized-authentication-authorization.html
Date Tue, 08 Jul 2014 08:47:13 GMT
Author: buildbot
Date: Tue Jul  8 08:47:13 2014
New Revision: 915457

Production update by buildbot for cxf


Modified: websites/production/cxf/content/cache/docs.pageCache
Binary files - no diff available.

Added: websites/production/cxf/content/docs/standardized-authentication-authorization.html
--- websites/production/cxf/content/docs/standardized-authentication-authorization.html (added)
+++ websites/production/cxf/content/docs/standardized-authentication-authorization.html Tue
Jul  8 08:47:13 2014
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+  <head>
+<link type="text/css" rel="stylesheet" href="/resources/site.css">
+<script src='/resources/space.js'></script>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<meta name="keywords" content="business integration, EAI, SOA, Service Oriented Architecture,
web services, SOAP, JBI, JMS, WSDL, XML, EDI, Electronic Data Interchange, standards support,
integration standards, application integration, middleware, software, solutions, services,
CXF, open source">
+<meta name="description" content="Apache CXF, Services Framework - Standardized Authentication
/ Authorization">
+<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shCoreCXF.css">
+<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shThemeCXF.css">
+<script src='/resources/highlighter/scripts/shCore.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
+  SyntaxHighlighter.defaults['toolbar'] = false;
+  SyntaxHighlighter.all();
+    <title>
+Apache CXF -- Standardized Authentication / Authorization
+    </title>
+  </head>
+<body onload="init()">
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr>
+    <td id="cell-0-0" colspan="2">&nbsp;</td>
+    <td id="cell-0-1">&nbsp;</td>
+    <td id="cell-0-2" colspan="2">&nbsp;</td>
+  </tr>
+  <tr>
+    <td id="cell-1-0">&nbsp;</td>
+    <td id="cell-1-1">&nbsp;</td>
+    <td id="cell-1-2">
+      <!-- Banner -->
+<div class="banner" id="banner"><div><table border="0" cellpadding="0" cellspacing="0"
width="100%"><tr><td align="left" colspan="1" nowrap>
+<a shape="rect" href="" title="Apache CXF"><span style="font-weight:
bold; font-size: 170%; color: white">Apache CXF</span></a>
+</td><td align="right" colspan="1" nowrap>
+<a shape="rect" href="" title="The Apache Sofware Foundation"><img
border="0" alt="ASF Logo" src=""></a>
+      <!-- Banner -->
+      <div id="top-menu">
+        <table border="0" cellpadding="1" cellspacing="0" width="100%">
+          <tr>
+            <td>
+              <div align="left">
+                <!-- Breadcrumbs -->
+<a href="index.html">Index</a>&nbsp;&gt;&nbsp;<a href="standardized-authentication-authorization.html">Standardized
Authentication / Authorization</a>
+                <!-- Breadcrumbs -->
+              </div>
+            </td>
+            <td>
+              <div align="right">
+                <!-- Quicklinks -->
+<div id="quicklinks"><p><a shape="rect" href="">Download</a>
| <a shape="rect" href="">Documentation</a></p></div>
+                <!-- Quicklinks -->
+              </div>
+            </td>
+          </tr>
+        </table>
+      </div>
+    </td>
+    <td id="cell-1-3">&nbsp;</td>
+    <td id="cell-1-4">&nbsp;</td>
+  </tr>
+  <tr>
+    <td id="cell-2-0" colspan="2">&nbsp;</td>
+    <td id="cell-2-1">
+      <table>
+        <tr valign="top">
+          <td height="100%">
+            <div id="wrapper-menu-page-right">
+              <div id="wrapper-menu-page-top">
+                <div id="wrapper-menu-page-bottom">
+                  <div id="menu-page">
+                    <!-- NavigationBar -->
+<div id="navigation"><ul class="alternate"><li><a shape="rect" href="overview.html">Overview</a></li><li><a
shape="rect" href="how-tos.html">How-Tos</a></li><li><a shape="rect"
href="frontends.html">Frontends</a></li><li><a shape="rect" href="databindings.html">DataBindings</a></li><li><a
shape="rect" href="transports.html">Transports</a></li><li><a shape="rect"
href="configuration.html">Configuration</a></li><li><a shape="rect"
href="debugging-and-logging.html">Debugging and Logging</a></li><li><a
shape="rect" href="tools.html">Tools</a></li><li><a shape="rect" href="restful-services.html">RESTful
Services</a></li><li><a shape="rect" href="wsdl-bindings.html">WSDL
Bindings</a></li><li><a shape="rect" href="service-routing.html">Service
Routing</a></li><li><a shape="rect" href="dynamic-languages.html">Dynamic
Languages</a></li><li><a shape="rect" href="ws-support.html">WS-*
Support</a></li><li><a shape="rect" href="advanced-integration.html">Advanced
Integration</a></li><li><a shape
 ="rect" href="deployment.html">Deployment</a></li><li><a shape="rect"
href="schemas-and-namespaces.html">Use of Schemas and Namespaces</a></li></ul><hr><ul
class="alternate"><li><p>Search</p></li></ul><form enctype="application/x-www-form-urlencoded"
method="get" id="cse-search-box" action="">
+  <div>
+    <input type="hidden" name="cx" value="002890367768291051730:o99qiwa09y4">
+    <input type="hidden" name="ie" value="UTF-8">
+    <input type="text" name="q" size="21">
+    <input type="submit" name="sa" value="Search">
+  </div>
+<script type="text/javascript" src=";lang=en"></script><hr><ul
class="alternate"><li><a shape="rect" href="">API
2.x (Javadoc)</a></li><li><a shape="rect" href="">API
3.x (Javadoc)</a></li><li><a shape="rect" href="">CXF
+                    <!-- NavigationBar -->
+                  </div>
+              </div>
+            </div>
+          </div>
+         </td>
+         <td height="100%">
+           <!-- Content -->
+           <div class="wiki-content">
+<div id="ConfluenceContent">    <div class="aui-message hint shadowed information-macro">
+                            <span class="aui-icon icon-hint">Icon</span>
+                <div class="message-content">
+                            Ideas / Proposal
+                    </div>
+    </div>
+<p>&#160;</p><p>CXF already supports a wide range of authentication
and authorization approaches. Unfortunately they are all configured differently and do not
integrate well with each other.</p><p>So the idea is to create one standardized
authentication / authorization flow in CXF where the modules can then fit in. There are a
lot of security frameworks out there that could be used as a basis for this. The problem is
though that each framework&#160; (like Shiro or Spring Security) uses its own mechanisms
which are not standardized. So by choosing one framework we would force our users to depend
on this.</p><p>The best standardized security framework in java is JAAS. It is
already included in Java and most security frameworks can be hooked into it. So let&#180;s
investigate what we could do with JAAS.</p><h2 id="StandardizedAuthentication/Authorization-AuthenticationusingJAAS">Authentication
using JAAS</h2><p>JAAS authentication is done by creating a LoginContext and doing
a login on
  it. Things to configure is the name of the login config and the Callback Handlers. So CXF
needs mechanisms for the user to set the config name and needs to provide CallBackHandlers
to supply credentials.</p><h2 id="StandardizedAuthentication/Authorization-CallbackHandlers">CallbackHandlers</h2><p>CXF
needs to supply different data to identify the users depending on the chosen authentication
variant.</p><p>Basic Auth: username and password from HTTP header</p><p>WS-Security
UserNameToken: Username and password from SOAP header</p><p>Spnego: Kerberos token
from HTTP header</p><p>HTTPS client cert: Certificate information</p><p>We
could simply detect what information is provided and configure the Callbackhandlers for each
variant.</p><h2 id="StandardizedAuthentication/Authorization-JAASconfiguration">JAAS
configuration</h2><p>The JAAS configuration is supplied differently depending
on the runtime CXF runs in.</p><p>Standalone: For standalone usage the JAAS config
can simply come from 
 a file.</p><p>Servlet Container: Not sure. Is there a standard approach for this?</p><p>Apache
Karaf: Karaf already provides a JAAS integration so we just have to configure the JAAS config
name and supply a suitable config in karaf</p><h2 id="StandardizedAuthentication/Authorization-SupplyingRoleandUserinformation">Supplying
Role and User information</h2><p>JAAS stores identity information in the JAAS
subject. The method getPrincipals returns Principal objects which can be users, roles or even
other identity information. To differentiate between roles and users there are two common
approaches.</p><ol><li>different Classes like a UserPrincipal or RolePrincipal.
Unfortunately there are no standard interfaces</li><li>prefixes. So for example
roles start with role- . Again there is no standard</li></ol><h2 id="StandardizedAuthentication/Authorization-Authorization">Authorization</h2><p>Authorization
has very diverse requirements. So we need to make sure we integrate well with different 
 approaches.</p><p>Generally the idea is to base the Authorization on the JAAS
login data. After a JAAS login the JAAS subject can be retrieved in a standard way:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[AccessControlContext
acc = AccesController.getContext();
+Subject subject = Subject.getSubject(acc);]]></script>
+</div></div><p>So the idea is that we provide certain default authorization
variants that rely on the above to retrieve authentication information in a standardized way.
So authorization is nicely decoupled from authentication and fully standards based.</p><p>This
then also provides a nice interface for users or other frameworks to access authentication
information and provide custom authorization variants.</p><h2 id="StandardizedAuthentication/Authorization-DefaultAuthorizationVariants">Default
Authorization Variants</h2><h3 id="StandardizedAuthentication/Authorization-JEEannotations">JEE
annotations</h3><p>Java EE provides some standard annotations like @RolesAllowed.
We can provide an interceptor that reads the annotations of serivce impls and provides authorization
like in a JEE container.</p><h3 id="StandardizedAuthentication/Authorization-XACMLPEP">XACML
PEP</h3><p>An XACML policy enforcement point can retrieve the JAAS login data
and do authorization against an XACML Policy D
 ecision Point (PDP).</p><h3 id="StandardizedAuthentication/Authorization-KarafrolebasedOSGiserviceAuthorization">Karaf
role based OSGi service Authorization</h3><p>Karaf 3 already supports authorization
on the OSGi service level and uses JAAS for authentication. So if we do a JAAS login in CXF
and the service impl code calls an OSGi service then the Karaf role based securtiy should
already work out of the box.</p><h2 id="StandardizedAuthentication/Authorization-Karafintegration">Karaf
integration</h2><p>Ideally we should integrate the new authentication / authorization
model in a way that enable the user to switch on authentication for the karaf server without
specific configurations in the user bundles that implement the services.</p><p>So
we could have a config setting for the CXF OSGi servlet to enable JAAS authentication and
set a JAAS config. This would then enable authentication for all services using the named
JAAS config from karaf. We could then also switch on the annotaion
  based authorization. So users could leverage this for their service by just supplying the
annotations and doing no other configs on the service level.</p><p>A further approach
would be to let the user configure named features on the CXF servlet level (which are then
retrieved as OSGi services). So the user can even attach his own extensions on the server
level like for ecxample integrating a custom XACML PEP.</p><h2 id="StandardizedAuthentication/Authorization-Problems">Problems</h2><p>Doing
a full JAAS login requires to use subject.doAs to populate the AcessControlContext. This is
not possible in a CXF interceptor as the interceptor only works on a message but can not call
the next interceptor for doAs. So the question is where to do the JAAS login and the doAs?</p><p>&#160;</p></div>
+           </div>
+           <!-- Content -->
+         </td>
+        </tr>
+      </table>
+   </td>
+   <td id="cell-2-2" colspan="2">&nbsp;</td>
+  </tr>
+  <tr>
+   <td id="cell-3-0">&nbsp;</td>
+   <td id="cell-3-1">&nbsp;</td>
+   <td id="cell-3-2">
+     <div id="footer">
+       <!-- Footer -->
+       <div id="site-footer">
+         <a href="">Privacy Policy</a>
+         (<a href="">edit
+	 (<a href=";showComments=true&amp;showCommentArea=true#addcomment">add
+	Apache CXF, CXF, Apache, the Apache feather logo are trademarks of The Apache Software Foundation.<br>
+        All other marks mentioned may be trademarks or registered trademarks of their respective
+       </div>
+       <!-- Footer -->
+     </div>
+   </td>
+   <td id="cell-3-3">&nbsp;</td>
+   <td id="cell-3-4">&nbsp;</td>
+  </tr>
+  <tr>
+    <td id="cell-4-0" colspan="2">&nbsp;</td>
+    <td id="cell-4-1">&nbsp;</td>
+    <td id="cell-4-2" colspan="2">&nbsp;</td>
+  </tr>
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "' type='text/javascript'%3E%3C/script%3E"));
+<script type="text/javascript">
+try {
+var pageTracker = _gat._getTracker("UA-4458903-1");
+} catch(err) {}</script>

View raw message