PHP Classes

File: web/SSO/SAML/authmemcookie.php

Recommend this page to a friend!
  Classes of william amed   Raptor 2   web/SSO/SAML/authmemcookie.php   Download  
File: web/SSO/SAML/authmemcookie.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Raptor 2
Framework that takes routes from annotations
Author: By
Last change:
Date: 8 years ago
Size: 3,444 bytes
 

Contents

Class file image Download
<?php

/**
 * This file implements an script which can be used to authenticate users with Auth MemCookie.
 * See: http://authmemcookie.sourceforge.net/
 *
 * The configuration for this script is stored in config/authmemcookie.php.
 *
 * The file extra/auth_memcookie.conf contains an example of how Auth Memcookie can be configured
 * to use simpleSAMLphp.
 */

require_once('_include.php');

try {
   
/* Load simpleSAMLphp configuration. */
   
$globalConfig = SimpleSAML_Configuration::getInstance();

   
/* Check if this module is enabled. */
   
if(!$globalConfig->getBoolean('enable.authmemcookie', FALSE)) {
        throw new
SimpleSAML_Error_Error('NOACCESS');
    }

   
/* Load Auth MemCookie configuration. */
   
$amc = SimpleSAML_AuthMemCookie::getInstance();

   
/* Determine the method we should use to authenticate the user and retrieve the attributes. */
   
$loginMethod = $amc->getLoginMethod();
    switch(
$loginMethod) {
    case
'authsource':
       
/* The default now. */
       
$sourceId = $amc->getAuthSource();
       
$s = new SimpleSAML_Auth_Simple($sourceId);
        break;
    case
'saml2':
       
$s = new SimpleSAML_Auth_BWC('saml2/sp/initSSO.php', 'saml2');
        break;
    case
'shib13':
       
$s = new SimpleSAML_Auth_BWC('shib13/sp/initSSO.php', 'shib13');
        break;
    default:
       
/* Should never happen, as the login method is checked in the AuthMemCookie class. */
       
throw new Exception('Invalid login method.');
    }

   
/* Check if the user is authorized. We attempt to authenticate the user if not. */
   
$s->requireAuth();

   
/* Generate session id and save it in a cookie. */
   
$sessionID = SimpleSAML_Utilities::generateID();

   
$cookieName = $amc->getCookieName();

   
$sessionHandler = SimpleSAML_SessionHandler::getSessionHandler();
   
$sessionHandler->setCookie($cookieName, $sessionID);


   
/* Generate the authentication information. */

   
$attributes = $s->getAttributes();

   
$authData = array();

   
/* Username. */
   
$usernameAttr = $amc->getUsernameAttr();
    if(!
array_key_exists($usernameAttr, $attributes)) {
        throw new
Exception('The user doesn\'t have an attribute named \'' . $usernameAttr .
           
'\'. This attribute is expected to contain the username.');
    }
   
$authData['UserName'] = $attributes[$usernameAttr];

   
/* Groups. */
   
$groupsAttr = $amc->getGroupsAttr();
    if(
$groupsAttr !== NULL) {
        if(!
array_key_exists($groupsAttr, $attributes)) {
            throw new
Exception('The user doesn\'t have an attribute named \'' . $groupsAttr .
               
'\'. This attribute is expected to contain the groups the user is a member of.');
        }
       
$authData['Groups'] = $attributes[$groupsAttr];
    } else {
       
$authData['Groups'] = array();
    }

   
$authData['RemoteIP'] = $_SERVER['REMOTE_ADDR'];

    foreach(
$attributes as $n => $v) {
       
$authData['ATTR_' . $n] = $v;
    }


   
/* Store the authentication data in the memcache server. */

   
$data = '';
    foreach(
$authData as $n => $v) {
        if(
is_array($v)) {
           
$v = implode(':', $v);
        }

       
$data .= $n . '=' . $v . "\r\n";
    }


   
$memcache = $amc->getMemcache();
   
$expirationTime = $s->getAuthData('Expire');
   
$memcache->set($sessionID, $data, 0, $expirationTime);

   
/* Register logout handler. */
   
$session = SimpleSAML_Session::getSessionFromRequest();
   
$session->registerLogoutHandler('SimpleSAML_AuthMemCookie', 'logoutHandler');

   
/* Redirect the user back to this page to signal that the login is completed. */
   
SimpleSAML_Utilities::redirectTrustedURL(SimpleSAML_Utilities::selfURL());
} catch(
Exception $e) {
    throw new
SimpleSAML_Error_Error('CONFIG', $e);
}