use of org.apache.cxf.rs.security.oauth2.client.Consumer in project cxf by apache.
the class JwtTokenUtils method createAccessTokenFromJwt.
public static ServerAccessToken createAccessTokenFromJwt(JoseJwtConsumer consumer, String jose, ClientRegistrationProvider clientProvider, Map<String, String> claimsMap) {
JwtClaims claims = consumer.getJwtToken(jose).getClaims();
// 'client_id' or 'cid', default client_id
String clientIdClaimName = JwtTokenUtils.getClaimName(OAuthConstants.CLIENT_ID, OAuthConstants.CLIENT_ID, claimsMap);
String clientId = claims.getStringProperty(clientIdClaimName);
Client c = clientProvider.getClient(clientId);
long issuedAt = claims.getIssuedAt();
long lifetime = claims.getExpiryTime() - issuedAt;
BearerAccessToken at = new BearerAccessToken(c, jose, lifetime, issuedAt);
List<String> audiences = claims.getAudiences();
if (audiences != null && !audiences.isEmpty()) {
at.setAudiences(claims.getAudiences());
}
String issuer = claims.getIssuer();
if (issuer != null) {
at.setIssuer(issuer);
}
Object scope = claims.getClaim(OAuthConstants.SCOPE);
if (scope != null) {
String[] scopes = scope instanceof String ? scope.toString().split(" ") : CastUtils.cast((List<?>) scope).toArray(new String[] {});
List<OAuthPermission> perms = new LinkedList<OAuthPermission>();
for (String s : scopes) {
if (!StringUtils.isEmpty(s)) {
perms.add(new OAuthPermission(s.trim()));
}
}
at.setScopes(perms);
}
final String usernameProp = "username";
String usernameClaimName = JwtTokenUtils.getClaimName(usernameProp, usernameProp, claimsMap);
String username = claims.getStringProperty(usernameClaimName);
String subject = claims.getSubject();
if (username != null) {
UserSubject userSubject = new UserSubject(username);
if (subject != null) {
userSubject.setId(subject);
}
at.setSubject(userSubject);
} else if (subject != null) {
at.setSubject(new UserSubject(subject));
}
String grantType = claims.getStringProperty(OAuthConstants.GRANT_TYPE);
if (grantType != null) {
at.setGrantType(grantType);
}
String grantCode = claims.getStringProperty(OAuthConstants.AUTHORIZATION_CODE_GRANT);
if (grantCode != null) {
at.setGrantCode(grantCode);
}
String codeVerifier = claims.getStringProperty(OAuthConstants.AUTHORIZATION_CODE_VERIFIER);
if (codeVerifier != null) {
at.setClientCodeVerifier(codeVerifier);
}
String nonce = claims.getStringProperty(OAuthConstants.NONCE);
if (nonce != null) {
at.setNonce(nonce);
}
Map<String, String> extraProperties = CastUtils.cast((Map<?, ?>) claims.getClaim("extra_properties"));
if (extraProperties != null) {
at.getExtraProperties().putAll(extraProperties);
Map<String, Object> cnfClaim = CastUtils.cast((Map<?, ?>) claims.getClaim(JwtConstants.CLAIM_CONFIRMATION));
if (cnfClaim != null) {
Object certCnf = cnfClaim.get(JoseConstants.HEADER_X509_THUMBPRINT_SHA256);
if (certCnf != null) {
at.getExtraProperties().put(JoseConstants.HEADER_X509_THUMBPRINT_SHA256, certCnf.toString());
}
}
}
return at;
}
use of org.apache.cxf.rs.security.oauth2.client.Consumer in project cxf by apache.
the class JAXRSOAuth2TlsTest method testTwoWayTLSClientUnbound.
@Test
public void testTwoWayTLSClientUnbound() throws Exception {
String address = "https://localhost:" + PORT + "/oauth2/token";
WebClient wc = createOAuth2WebClient(address);
try {
OAuthClientUtils.getAccessToken(wc, new Consumer("unbound"), new CustomGrant());
fail("exception_expected");
} catch (OAuthServiceException ex) {
assertEquals("invalid_client", ex.getError().getError());
}
}
use of org.apache.cxf.rs.security.oauth2.client.Consumer in project cxf by apache.
the class JAXRSOAuth2TlsTest method doTestTwoWayTLSClientIdBoundJwt.
private void doTestTwoWayTLSClientIdBoundJwt(String clientId) throws Exception {
String atServiceAddress = "https://localhost:" + PORT + "/oauth2Jwt/token";
WebClient wc = createOAuth2WebClient(atServiceAddress);
ClientAccessToken at = OAuthClientUtils.getAccessToken(wc, new Consumer(clientId), new CustomGrant());
assertNotNull(at.getTokenKey());
JwsJwtCompactConsumer c = new JwsJwtCompactConsumer(at.getTokenKey());
JwtClaims claims = JwtUtils.jsonToClaims(c.getDecodedJwsPayload());
Map<String, Object> cnfs = claims.getMapProperty(JwtConstants.CLAIM_CONFIRMATION);
assertNotNull(cnfs);
assertNotNull(cnfs.get(JoseConstants.HEADER_X509_THUMBPRINT_SHA256));
String protectedRsAddress = "https://localhost:" + PORT + "/rsJwt/bookstore/books/123";
WebClient wcRs = createRsWebClient(protectedRsAddress, at, "client.xml");
Book book = wcRs.get(Book.class);
assertEquals(123L, book.getId());
String protectedRsAddress2 = "https://localhost:" + PORT + "/rsJwt2/bookstore/books/123";
WebClient wcRs2 = createRsWebClient(protectedRsAddress2, at, "client.xml");
book = wcRs2.get(Book.class);
assertEquals(123L, book.getId());
String unprotectedRsAddress = "https://localhost:" + PORT + "/rsUnprotected/bookstore/books/123";
WebClient wcRsDiffClientCert = createRsWebClient(unprotectedRsAddress, at, "client2.xml");
// Unprotected resource
book = wcRsDiffClientCert.get(Book.class);
assertEquals(123L, book.getId());
// Protected resource, access token was created with Morphit.jks key, RS is accessed with
// Bethal.jks key, thus 401 is expected
wcRsDiffClientCert = createRsWebClient(protectedRsAddress, at, "client2.xml");
assertEquals(401, wcRsDiffClientCert.get().getStatus());
wcRsDiffClientCert = createRsWebClient(protectedRsAddress2, at, "client2.xml");
assertEquals(401, wcRsDiffClientCert.get().getStatus());
}
use of org.apache.cxf.rs.security.oauth2.client.Consumer in project cxf by apache.
the class JAXRSOAuth2TlsTest method testTwoWayTLSClientIdBound.
@Test
public void testTwoWayTLSClientIdBound() throws Exception {
String atServiceAddress = "https://localhost:" + PORT + "/oauth2/token";
WebClient wc = createOAuth2WebClient(atServiceAddress);
ClientAccessToken at = OAuthClientUtils.getAccessToken(wc, new Consumer("bound"), new CustomGrant());
assertNotNull(at.getTokenKey());
}
use of org.apache.cxf.rs.security.oauth2.client.Consumer in project cxf by apache.
the class OIDCFlowTest method testAuthorizationCodeFlowWithState.
@org.junit.Test
public void testAuthorizationCodeFlowWithState() throws Exception {
URL busFile = OIDCFlowTest.class.getResource("client.xml");
String address = "https://localhost:" + PORT + "/services/";
WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), "alice", "security", busFile.toString());
// Save the Cookie for the second request...
WebClient.getConfig(client).getRequestContext().put(org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
// Get Authorization Code
String code = OAuth2TestUtils.getAuthorizationCode(client, "openid", "consumer-id", null, "123456789");
assertNotNull(code);
// Now get the access token
client = WebClient.create(address, OAuth2TestUtils.setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
// Save the Cookie for the second request...
WebClient.getConfig(client).getRequestContext().put(org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
ClientAccessToken accessToken = OAuth2TestUtils.getAccessTokenWithAuthorizationCode(client, code);
assertNotNull(accessToken.getTokenKey());
assertTrue(accessToken.getApprovedScope().contains("openid"));
String idToken = accessToken.getParameters().get("id_token");
assertNotNull(idToken);
validateIdToken(idToken, null);
}
Aggregations