vertical framework formularios example español yii yii-components simplesamlphp

formularios - cómo usar SimpleSAMLphp en yii framework?



yii2 framework español (3)

Se puede hacer simplemente usando el directorio "proveedores".

  1. Descargue la Biblioteca PHP desde https://simplesamlphp.org/
  2. Implementarlo en Yii Framework como una biblioteca de proveedores. ( http://www.yiiframework.com/doc/guide/1.1/en/extension.integration )

Buena suerte :)

Tengo dos proyectos en yii framework y quiero usar ambos proyectos usando SimpleSAMLphp con SSO. La condición, necesito es si inicio sesión desde el primer proyecto, quiero acceso al segundo proyecto. Gracias de antemano.


Primero carga la biblioteca SAML desactivando temporalmente el autocargador Yii. Esto es solo para permitirle usar las clases y métodos de SAML:

<?php class YiiSAML extends CComponent { private $_yiiSAML = null; static private function pre() { require_once (Yii::app()->params[''simpleSAML''] . ''/lib/_autoload.php''); // temporary disable Yii autoloader spl_autoload_unregister(array( ''YiiBase'', ''autoload'' )); } static private function post() { // enable Yii autoloader spl_autoload_register(array( ''YiiBase'', ''autoload'' )); } public function __construct() { self::pre(); //We select our authentication source: $this->_yiiSAML = new SimpleSAML_Auth_Simple(Yii::app()->params[''authSource'']); self::post(); } static public function loggedOut($param, $stage) { self::pre(); $state = SimpleSAML_Auth_State::loadState($param, $stage); self::post(); if (isset($state[''saml:sp:LogoutStatus''])) $ls = $state[''saml:sp:LogoutStatus'']; /* Only works for SAML SP */ else return true; return $ls[''Code''] === ''urn:oasis:names:tc:SAML:2.0:status:Success'' && !isset($ls[''SubCode'']); } public function __call($method, $args) { $params = (is_array($args) and !empty($args)) ? $args[0] : $args; if (method_exists($this->_yiiSAML, $method)) return $this->_yiiSAML->$method($params); else throw new YiiSAMLException(Yii::t(''app'', ''The method {method} does not exist in the SAML class'', array( ''{method}'' => $method ))); } } class YiiSAMLException extends CException { }

A continuación, define un filtro que amplía la clase CFilter Yii:

<?php Yii::import(''lib.YiiSAML''); class SAMLControl extends CFilter { protected function preFilter($filterChain) { $msg = Yii::t(''yii'', ''You are not authorized to perform this action.''); $saml = new YiiSAML(); if (Yii::app()->user->isGuest) { Yii::app()->user->loginRequired(); return false; } else { $saml_attributes = $saml->getAttributes(); if (!$saml->isAuthenticated() or Yii::app()->user->id != $saml_attributes[''User.id''][0]) { Yii::app()->user->logout(); Yii::app()->user->loginRequired(); return false; } return true; } } }

Y finalmente, en los controladores que le interesa restringir, anula el método filters() :

public function filters() { return array( array( ''lib.SAMLControl'' ) , // perform access control for CRUD operations ... ); }

Espero eso ayude.


Encontré una Extensión Yii para SimpleSAMLphp en github

https://github.com/asasmoyo/yii-simplesamlphp

Puede cargar el más simpleamlphp como una biblioteca de proveedor y luego especificar el archivo de autocarga en la extensión.

Además de la extensión, puede copiar todas las configuraciones y metadatos necesarios en la aplicación y configurar la configuración de SimpleSAML para cargar las configuraciones desde su directorio, para que pueda mantener intacto el paquete del proveedor para futuras actualizaciones.