Author: asanso
Date: Thu Apr 18 14:04:51 2013
New Revision: 1469334

URL: http://svn.apache.org/r1469334
Log:
SLING-2759 - Provide an OpenId Connect Authentication Handler

Modified:
    sling/whiteboard/asanso/openidconnect/pom.xml
    
sling/whiteboard/asanso/openidconnect/src/main/java/org/apache/sling/auth/openidconnect/impl/OpenIDConnectAuthenticationHandler.java

Modified: sling/whiteboard/asanso/openidconnect/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/asanso/openidconnect/pom.xml?rev=1469334&r1=1469333&r2=1469334&view=diff
==============================================================================
--- sling/whiteboard/asanso/openidconnect/pom.xml (original)
+++ sling/whiteboard/asanso/openidconnect/pom.xml Thu Apr 18 14:04:51 2013
@@ -88,9 +88,24 @@
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
+               <dependency>
+               <groupId>org.apache.oltu.oauth2</groupId>
+               <artifactId>org.apache.oltu.oauth2.client</artifactId>
+               <version>0.31-SNAPSHOT</version>
+       </dependency>
+       <dependency>
+               <artifactId>org.apache.oltu.oauth2.common</artifactId>
+               <groupId>org.apache.oltu.oauth2</groupId>
+               <version>0.31-SNAPSHOT</version>
+       </dependency>
+       
     </dependencies>
 </project>

Modified: 
sling/whiteboard/asanso/openidconnect/src/main/java/org/apache/sling/auth/openidconnect/impl/OpenIDConnectAuthenticationHandler.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/asanso/openidconnect/src/main/java/org/apache/sling/auth/openidconnect/impl/OpenIDConnectAuthenticationHandler.java?rev=1469334&r1=1469333&r2=1469334&view=diff
==============================================================================
--- 
sling/whiteboard/asanso/openidconnect/src/main/java/org/apache/sling/auth/openidconnect/impl/OpenIDConnectAuthenticationHandler.java
 (original)
+++ 
sling/whiteboard/asanso/openidconnect/src/main/java/org/apache/sling/auth/openidconnect/impl/OpenIDConnectAuthenticationHandler.java
 Thu Apr 18 14:04:51 2013
@@ -19,18 +19,26 @@
 package org.apache.sling.auth.openidconnect.impl;
 
 import java.io.IOException;
+import java.util.Dictionary;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
+import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
+import org.apache.oltu.oauth2.common.message.types.ResponseType;
 import org.apache.sling.auth.core.spi.AuthenticationHandler;
 import org.apache.sling.auth.core.spi.AuthenticationInfo;
+import org.apache.sling.commons.osgi.OsgiUtil;
 
 @Component(
                metatype = true,
@@ -46,10 +54,62 @@ public class OpenIDConnectAuthentication
        
         /** default log */
     private final Logger log = LoggerFactory.getLogger(getClass());
+    
+    @Property
+    public static final String PROP_AUTHORIZATION_ENDPOINT= 
"oauth.authorization.endpoint";
+    
+    @Property
+    public static final String PROP_TOKEN_ENDPOINT= "oauth.token.endpoint";
+    
+    @Property
+    public static final String PROP_CLIENT_ID= "oauth.clientId";
+    
+    @Property
+    public static final String PROP_REDIRECT_URI= "oauth.redirect.uri";
+    
+    @Property
+    public static final String PROP_SCOPES= "oauth.scopes";
+    
+    private String authorizationEndpoint;
+    private String tokenEndpoint;
+    private String clientId;
+    private String redirectUri;
+    private String scopes;
+    
+    @Activate
+       protected void activate(ComponentContext componentContext) throws 
Exception {
+       
+       final Dictionary props = componentContext.getProperties();
+       
+               authorizationEndpoint = 
OsgiUtil.toString(props.get(PROP_AUTHORIZATION_ENDPOINT),"");
+               tokenEndpoint = 
OsgiUtil.toString(props.get(PROP_TOKEN_ENDPOINT),"");
+       clientId =  OsgiUtil.toString(props.get(PROP_CLIENT_ID),"");
+       redirectUri =  OsgiUtil.toString(props.get(PROP_REDIRECT_URI),"");
+       scopes =  OsgiUtil.toString(props.get(PROP_SCOPES),"");
+    }
        
 
        public AuthenticationInfo extractCredentials(HttpServletRequest request,
-                       HttpServletResponse response) {
+                       HttpServletResponse response) {                         
+        try {
+                       OAuthClientRequest clientRequest = OAuthClientRequest
+                       .authorizationLocation(authorizationEndpoint)
+                       .setClientId(clientId)
+                       .setRedirectURI(redirectUri)
+                       .setResponseType(ResponseType.CODE.toString())
+                       .setScope(scopes)
+                       .buildQueryMessage();
+                       response.sendRedirect(clientRequest.getLocationUri());
+                       return AuthenticationInfo.DOING_AUTH;
+                       
+               } catch (OAuthSystemException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+               
                return null;
        }
 


Reply via email to