Repository: cxf-fediz
Updated Branches:
  refs/heads/master 0154f6606 -> d8d60f4c1


Making sure BackChannel handler can use id_token_hint if it is available


Project: http://git-wip-us.apache.org/repos/asf/cxf-fediz/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf-fediz/commit/d8d60f4c
Tree: http://git-wip-us.apache.org/repos/asf/cxf-fediz/tree/d8d60f4c
Diff: http://git-wip-us.apache.org/repos/asf/cxf-fediz/diff/d8d60f4c

Branch: refs/heads/master
Commit: d8d60f4c1308b64df40b891a51d064b79028f457
Parents: 0154f66
Author: Sergey Beryozkin <[email protected]>
Authored: Fri Jun 2 13:42:31 2017 +0100
Committer: Sergey Beryozkin <[email protected]>
Committed: Fri Jun 2 13:42:31 2017 +0100

----------------------------------------------------------------------
 .../oidc/logout/BackChannelLogoutHandler.java      | 17 ++++++++++-------
 .../fediz/service/oidc/logout/LogoutService.java   |  2 +-
 2 files changed, 11 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/d8d60f4c/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/BackChannelLogoutHandler.java
----------------------------------------------------------------------
diff --git 
a/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/BackChannelLogoutHandler.java
 
b/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/BackChannelLogoutHandler.java
index 2c01b71..74687de 100644
--- 
a/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/BackChannelLogoutHandler.java
+++ 
b/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/BackChannelLogoutHandler.java
@@ -33,18 +33,20 @@ import org.apache.cxf.rs.security.jose.jwt.JwtToken;
 import org.apache.cxf.rs.security.oauth2.common.Client;
 import org.apache.cxf.rs.security.oauth2.common.ServerAccessToken;
 import org.apache.cxf.rs.security.oauth2.provider.OAuthDataProvider;
+import org.apache.cxf.rs.security.oidc.common.IdToken;
 import org.apache.cxf.rs.security.oidc.idp.OidcUserSubject;
 import org.apache.cxf.rt.security.crypto.CryptoUtils;
 
 public class BackChannelLogoutHandler extends JoseJwtProducer {
     private static final String BACK_CHANNEL_LOGOUT_URI = 
"backchannel_logout_uri";
     private static final String LOGOUT_TOKEN = "logout_token";
+    private static final String EVENTS_PROPERTY = "events";
     private static final String BACK_CHANNEL_LOGOUT_EVENT =
         "http://schemas.openid.net/event/backchannel-logout";;
     private ExecutorService executorService = Executors.newCachedThreadPool();
     private OAuthDataProvider dataProvider;
         
-    public void handleLogout(Client client, OidcUserSubject subject) {
+    public void handleLogout(Client client, OidcUserSubject subject, IdToken 
idTokenHint) {
         // At the moment the only to find out which RPs a given User is logged 
in is
         // to check the access tokens - it can not offer a complete solution, 
for ex
         // in cases when ATs have expired or been revoked or Implicit id_token 
flow is used.
@@ -56,23 +58,24 @@ public class BackChannelLogoutHandler extends 
JoseJwtProducer {
             }
             String uri = client.getProperties().get(BACK_CHANNEL_LOGOUT_URI);
             if (uri != null) {
-                submitBackChannelLogoutRequest(client, subject, uri);
+                submitBackChannelLogoutRequest(client, subject, idTokenHint, 
uri);
             }
         }
 
     }
 
-    private void submitBackChannelLogoutRequest(Client client, OidcUserSubject 
subject, String uri) {
+    private void submitBackChannelLogoutRequest(Client client, OidcUserSubject 
subject,
+            IdToken idTokenHint, String uri) {
         // Application context is expected to contain HttpConduit HTTPS 
configuration
         final WebClient wc = WebClient.create(uri);
-        
+        IdToken idToken = idTokenHint != null ? idTokenHint : 
subject.getIdToken(); 
         JwtClaims claims = new JwtClaims();
-        claims.setIssuer(subject.getIdToken().getIssuer());
-        claims.setSubject(subject.getIdToken().getSubject());
+        claims.setIssuer(idToken.getIssuer());
+        claims.setSubject(idToken.getSubject());
         claims.setAudience(client.getClientId());
         claims.setIssuedAt(System.currentTimeMillis() / 1000);
         
claims.setTokenId(Base64UrlUtility.encode(CryptoUtils.generateSecureRandomBytes(16)));
-        claims.setProperty("events", 
+        claims.setProperty(EVENTS_PROPERTY, 
                 Collections.singletonMap(BACK_CHANNEL_LOGOUT_EVENT, 
Collections.emptyMap()));
         final String logoutToken = super.processJwt(new JwtToken(claims));
         executorService.submit(new Runnable() {

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/d8d60f4c/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/LogoutService.java
----------------------------------------------------------------------
diff --git 
a/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/LogoutService.java
 
b/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/LogoutService.java
index 2a67192..b9ee23b 100644
--- 
a/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/LogoutService.java
+++ 
b/services/oidc/src/main/java/org/apache/cxf/fediz/service/oidc/logout/LogoutService.java
@@ -75,7 +75,7 @@ public class LogoutService extends JoseJwtConsumer {
         
         Client client = getClient(params, idTokenHint);
         if (backChannelLogoutHandler != null) {
-            backChannelLogoutHandler.handleLogout(client, subject);
+            backChannelLogoutHandler.handleLogout(client, subject, 
idTokenHint);
         }
         if (logoutHandlers != null) {
 

Reply via email to