Author: buildbot Date: Fri Mar 13 14:46:58 2015 New Revision: 943700 Log: Production update by buildbot for cxf
Modified: websites/production/cxf/content/cache/docs.pageCache websites/production/cxf/content/docs/jax-rs-jose.html Modified: websites/production/cxf/content/cache/docs.pageCache ============================================================================== Binary files - no diff available. Modified: websites/production/cxf/content/docs/jax-rs-jose.html ============================================================================== --- websites/production/cxf/content/docs/jax-rs-jose.html (original) +++ websites/production/cxf/content/docs/jax-rs-jose.html Fri Mar 13 14:46:58 2015 @@ -32,6 +32,7 @@ <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> <script src='/resources/highlighter/scripts/shBrushXml.js'></script> <script> SyntaxHighlighter.defaults['toolbar'] = false; @@ -117,22 +118,46 @@ Apache CXF -- JAX-RS JOSE <!-- Content --> <div class="wiki-content"> <div id="ConfluenceContent"><p> </p><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1426254394846 {padding: 0px;} -div.rbtoc1426254394846 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1426254394846 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1426257993585 {padding: 0px;} +div.rbtoc1426257993585 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1426257993585 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1426254394846"> +/*]]>*/</style></p><div class="toc-macro rbtoc1426257993585"> <ul class="toc-indentation"><li><a shape="rect" href="#JAX-RSJOSE-Introduction">Introduction</a></li><li><a shape="rect" href="#JAX-RSJOSE-MavenDependencies">Maven Dependencies</a></li><li><a shape="rect" href="#JAX-RSJOSE-JOSEOverview">JOSE Overview</a> <ul class="toc-indentation"><li><a shape="rect" href="#JAX-RSJOSE-JWAAlgorithms">JWA Algorithms</a></li><li><a shape="rect" href="#JAX-RSJOSE-JWKKeys">JWK Keys</a></li><li><a shape="rect" href="#JAX-RSJOSE-JWSSignature">JWS Signature</a></li><li><a shape="rect" href="#JAX-RSJOSE-JSONEncryption">JSON Encryption</a></li><li><a shape="rect" href="#JAX-RSJOSE-JSONWebTokens">JSON Web Tokens</a></li></ul> -</li><li><a shape="rect" href="#JAX-RSJOSE-JAX-RSJoseFilters">JAX-RS Jose Filters</a></li><li><a shape="rect" href="#JAX-RSJOSE-OAuth2andJose">OAuth2 and Jose</a></li><li><a shape="rect" href="#JAX-RSJOSE-Third-PartyAlternatives">Third-Party Alternatives</a></li></ul> +</li><li><a shape="rect" href="#JAX-RSJOSE-JOSEJAX-RSFilters">JOSE JAX-RS Filters</a></li><li><a shape="rect" href="#JAX-RSJOSE-Configuration">Configuration</a></li><li><a shape="rect" href="#JAX-RSJOSE-OAuth2andJose">OAuth2 and Jose</a></li><li><a shape="rect" href="#JAX-RSJOSE-Third-PartyAlternatives">Third-Party Alternatives</a></li></ul> </div><h1 id="JAX-RSJOSE-Introduction">Introduction</h1><p>CXF 3.0.x implements <a shape="rect" class="external-link" href="https://datatracker.ietf.org/wg/jose/documents/" rel="nofollow">JOSE</a>.</p><h1 id="JAX-RSJOSE-MavenDependencies">Maven Dependencies</h1><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-security-jose</artifactId> - <version>3.1.0</version> + <version>3.0.4</version> </dependency> ]]></script> -</div></div><p> </p><h1 id="JAX-RSJOSE-JOSEOverview">JOSE Overview</h1><p>JOSE is a set of high quality specifications that specify how data payloads can be signed and/or encrypted with the cryptographic properties set in JSON-formatted metadata (headers).</p><p>Note that not only JSON documents but also documents in the arbitrary formats can be secured: text, binary data, even XML.</p><p> </p><p>JOSE is a key piece of the advanced OAuth2 applications but is also perfect at securing the regular HTTP web service communications.</p><p> </p><p>At the moment two signature and encryption output formats are supported: compact and JSON.</p><p> </p><p>Compact format is a concatenation of Base64URL-encoded JOSE headers (where the cryptographic signature or encryption properties are set),</p><p>Base64URL-encoded payload (in the original form if it is signed, otherwise - encrypted), plus Base64URL-encoded signature of the payload or some of encryption process input or outpu t data</p><p>such as an initialization vector, authentication tag, etc.</p><p> </p><p>The JSON (full) format is where all the information describing a signature or encryption process is presented in a not-compact, regular JSON document, offering a non-optimized but easier to understand format.</p><p>The signature process also supports the detached body mode where the body to be signed is not included in the actual output - assuming that both the consumer and producer know how to access the original payload in order to</p><p>validate the signature.</p><p> </p><p>The following subsections will have the examples with more details.</p><h2 id="JAX-RSJOSE-JWAAlgorithms">JWA Algorithms</h2><p>All JOSE signature and encryption algorithms are grouped and described in a <a shape="rect" class="external-link" href="https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40" rel="nofollow">JSON Web Algorithms</a> (JWA) specification.</p><p>The algorithms are split into 3 catego ries: signature algorithms (MAC, RSA, Elliptic Curve), algorithms for supporting the encryption of content encryption keys (RSA-OAEP, Key Wrap, etc),</p><p>algorithms for encrypting the actual content (AES GCM, etc).</p><p>All encryption algorithms produce authentication tags which provides the protection against manipulating the already encrypted content.</p><p>Refer to this specification to get all the information needed (with the follow up links to the corresponding RFC when applicable) about a particular signature or encryption</p><p>algorithm: the properties, recommended key sizes, other security considerations related to all of or some specific algorithms.</p><h2 id="JAX-RSJOSE-JWKKeys">JWK Keys</h2><p> </p><p><a shape="rect" class="external-link" href="https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41" rel="nofollow">Json Web Key</a> (JWK) is a JSON document describing the cryptographic key properties. JWKs are very flexible and light-weight (in most cases) and one can expect JWKs becoming one of the major</p><p>mechanisms for representing and storing cryptographic keys. What is important is that one does not have to use a JWK in order to sign or encrypt the document, working directly with Java JCA secret and asymmetric key</p><p>representations is sufficient but JWK is a first class citizen in JOSE with all of JOSE examples using JWK representations.</p><h2 id="JAX-RSJOSE-JWSSignature">JWS Signature</h2><p> </p><h2 id="JAX-RSJOSE-JSONEncryption">JSON Encryption</h2><h2 id="JAX-RSJOSE-JSONWebTokens">JSON Web Tokens</h2><p> </p><h1 id="JAX-RSJOSE-JAX-RSJoseFilters">JAX-RS Jose Filters</h1><p> </p><h1 id="JAX-RSJOSE-OAuth2andJose">OAuth2 and Jose</h1><p> </p><h1 id="JAX-RSJOSE-Third-PartyAlternatives">Third-Party Alternatives</h1><p>Jose4J. Etc.</p><p> </p></div> +</div></div><p> </p><h1 id="JAX-RSJOSE-JOSEOverview">JOSE Overview</h1><p>JOSE is a set of high quality specifications that specify how data payloads can be signed and/or encrypted with the cryptographic properties set in JSON-formatted metadata (headers).</p><p>Note that not only JSON documents but also documents in the arbitrary formats can be secured: text, binary data, even XML.</p><p> </p><p>JOSE is a key piece of the advanced OAuth2 applications but is also perfect at securing the regular HTTP web service communications.</p><p> </p><p>At the moment two signature and encryption output formats are supported: compact and JSON.</p><p> </p><p>Compact format is a concatenation of Base64URL-encoded JOSE headers (where the cryptographic signature or encryption properties are set),</p><p>Base64URL-encoded payload (in the original form if it is signed, otherwise - encrypted), plus Base64URL-encoded signature of the payload or some of encryption process input or outpu t data</p><p>such as an initialization vector, authentication tag, etc.</p><p> </p><p>The JSON (full) format is where all the information describing a signature or encryption process is presented in a not-compact, regular JSON document, offering a non-optimized but easier to understand format.</p><p>The JSON format also supports multiple signatures when signing the content or multiple content key encryptions when encrypting the content which can be useful when multiple recipients are involved.</p><p>The signature process also supports the detached body mode where the body to be signed is not included in the actual output - assuming that both the consumer and producer know how to access the original payload in order to</p><p>validate the signature.</p><p> </p><p>The following subsections will have the examples with more details.</p><h2 id="JAX-RSJOSE-JWAAlgorithms">JWA Algorithms</h2><p>All JOSE signature and encryption algorithms are grouped and described in a <a shape="re ct" class="external-link" href="https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40" rel="nofollow">JSON Web Algorithms</a> (JWA) specification.</p><p>The algorithms are split into 3 categories: signature algorithms (MAC, RSA, Elliptic Curve), algorithms for supporting the encryption of content encryption keys (RSA-OAEP, Key Wrap, etc),</p><p>algorithms for encrypting the actual content (AES GCM, etc).</p><p>All encryption algorithms produce authentication tags which provides the protection against manipulating the already encrypted content.</p><p>Refer to this specification to get all the information needed (with the follow up links to the corresponding RFC when applicable) about a particular signature or encryption</p><p>algorithm: the properties, recommended key sizes, other security considerations related to all of or some specific algorithms.</p><p>CXF offers the initial utility support for working with JWA algorithms in <a shape="rect" class="external-link" href ="https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=tree;f=rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jwa;h=c2b9c5466de8f4b3ad1ea9270c1bc00f07fce862;hb=HEAD">this package</a>.</p><h2 id="JAX-RSJOSE-JWKKeys">JWK Keys</h2><p> </p><p><a shape="rect" class="external-link" href="https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41" rel="nofollow">Json Web Key</a> (JWK) is a JSON document describing the cryptographic key properties. JWKs are very flexible and light-weight (in most cases) and one can expect JWKs becoming one of the major</p><p>mechanisms for representing and storing cryptographic keys. What is important is that one does not have to use a JWK in order to sign or encrypt the document, working directly with Java JCA secret and asymmetric key</p><p>representations is sufficient but JWK is a first class citizen in JOSE with all of JOSE examples using JWK representations.</p><p>CXF offers a utility support for reading and writing JWK keys and key sets and for working with the encrypted inlined and standalone JWK stores in <a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=tree;f=rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk;h=0d47d676fbb333db265f12f57f25c3d8240872ba;hb=HEAD">this package</a>.</p><h2 id="JAX-RSJOSE-JWSSignature">JWS Signature</h2><p><a shape="rect" class="external-link" href="https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-41" rel="nofollow">JSON Web Signature</a> (JWS) document describes how a document content can be signed. For example, <a shape="rect" class="external-link" href="https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-41#appendix-A.1" rel="nofollow">Appendix A1</a> shows how the content can be signed with a MAC key.</p><p>Here is one of the ways you can do it in CXF, where a Json Web Token (JWT, see one of the next sections) is signed by a MAC key:<br clear="none"> </p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>CXF JWS HMac</b></div><div class="codeContent panelContent pdl"> +<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[// sign +JoseHeaders headers = new JoseHeaders(); +headers.setAlgorithm(SignatureAlgorithm.HS256.getJwaName()); + +JwtClaims claims = new JwtClaims(); +claims.setIssuer("joe"); +claims.setExpiryTime(1300819380L); +claims.setClaim("http://example.com/is_root", Boolean.TRUE); +JwtToken token = new JwtToken(headers, claims); + +JwsCompactProducer jws = new JwsJwtCompactProducer(token); + +jws.signWith(new HmacJwsSignatureProvider(ENCODED_MAC_KEY, SignatureAlgorithm.HS256)); +assertEquals(ENCODED_TOKEN_SIGNED_BY_MAC, jws.getSignedEncodedJws()); + +// validate +JwsJwtCompactConsumer jws = new JwsJwtCompactConsumer(ENCODED_TOKEN_SIGNED_BY_MAC); +assertTrue(jws.verifySignatureWith(new HmacJwsSignatureVerifier(ENCODED_MAC_KEY, + SignatureAlgorithm.HS256))); +JwtToken token = jws.getJwtToken(); +JoseHeaders headers = token.getHeaders(); +assertEquals(SignatureAlgorithm.HS256.getJwaName(), headers.getAlgorithm()); +validateClaims(token.getClaims());]]></script> +</div></div><p> </p><p>CXF ships JWS related classes in <a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=tree;f=rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws;h=46610253c8a71916e1955019ea1b01215a7745e6;hb=HEAD">this package</a>.</p><p><a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsSignatureProvider.java;h=9ca48cb2a3b534124f6bdb793a9b0dfa3b6890c5;hb=HEAD">JwsSignatureProvider</a> supports signing the content, <a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsSignatureVerifier.java;h=26f9597ddb216675cbb7ba24bcb1281c13001041;hb=HEAD">JwsSignatureVerifier</a> - validating the signatures. Providers and verifiers supporting RSA, HMac and Elliptic Curve signature al gorithms are shipped.</p><p>JwsCompactConsumer and JwsCompactProducer offer a utility support for creating and validating JWS compact serialization and accept keys in a variety of formats</p><p>(as JWKs, JCA representations, created out of band and wrapped in either JwsSignatureProvider or JwsSignatureVerifier).</p><p>JwsJwtCompactConsumer and JwsJwtCompactProducer are JwsCompactConsumer and JwsCompactProducer specializations that offer a utility support for signing Json Web Tokens in a compact format.</p><p>JwsJsonConsumer and JwsJsonProducer support JWS JSON (full) serialization.</p><p>JwsOutputStream and JwsJsonOutputStream are specialized output streams that can be used in conjunction with JWS JAX-RS filters (see one of the next sections)</p><p>to support the best effort at streaming the content while signing it.  These classes will use <a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=rt/rs/security/jose/src/main/ja va/org/apache/cxf/rs/security/jose/jws/JwsSignature.java;h=778b5cb38fd6951bcc06a2a226a057ec3d07d4ef;hb=HEAD">JwsSignature</a>  optionally returned from JwsSignatureProvider</p><p>instead of working with the consumer utility classes which deal with the signature process completely in memory.</p><p> </p><p>Many more examples will be added here.</p><h2 id="JAX-RSJOSE-JSONEncryption">JSON Encryption</h2><p> </p><h2 id="JAX-RSJOSE-JSONWebTokens">JSON Web Tokens</h2><p> </p><h1 id="JAX-RSJOSE-JOSEJAX-RSFilters">JOSE JAX-RS Filters</h1><p> </p><h1 id="JAX-RSJOSE-Configuration">Configuration</h1><p> </p><p> </p><h1 id="JAX-RSJOSE-OAuth2andJose">OAuth2 and Jose</h1><p> </p><h1 id="JAX-RSJOSE-Third-PartyAlternatives">Third-Party Alternatives</h1><p>Jose4J. Etc.</p><p> </p></div> </div> <!-- Content --> </td>