Category: Development, Models and Methodologies

podcast 1×08: CAS, Central Authentication Server

Reading time: 3 – 4 minutes

L’objectiu d’aquest podcast és donar una visió conceptual del funcionament de CAS 2.0, un servidor d’autenticacions SSO (Single Sign On). Bàsicament esta orientat a usuaris d’aplicacions amb interficie Web. A movilpoint l’estem usant tal com vaig comentar al podcast 1×07.

La diferència entre 1.0 i 2.0 és que la versió 1.0 només podia autenticar usuaris contra aplicacions web i aquests serveis no podien autenticar-se a la seva vegada contra altres serveis (serveis backend).

Amb l’esquema que hi ha a continuació i la previa lectura de les entitats d’un sistema CAS podreu seguir el podcast:


CAS - Central Authentication Server (schema)

A continuació descric les entitats que intervenen en un sistema CAS.

  • Service Ticket (ST): és una cadena de text que usa el client com a credencial per obtenir accés a un servei. Aquest tiquet s’obté del servidor CAS. La forma d’obtenir-lo és a través d’una cookie que es guarda al navegador.
  • Ticket Granting Cookie (TGC): cookie que s’envia al CAS quan un browser ja ha estat autenticat previament per aquest CAS, llavors aquest reconeix la cookie i li dona al browser un Service Ticket (ST) sense haver de passar el procés d’autenticació manual. Caduca en unes 8h aproximadament.
  • NetID: identifica a un ususari, el que coneixem habitualment com username.
  • ServiceID: identificador d’un servei, normalment en format URL.
  • Proxy Ticket (PT): és una altre cadena de text que usa un servei com a credencial per obtenir accés a un servei de backend. O sigui, que el primer servei per tal de desenvolupar la seva activitat li fa falta accedir a un altre servei (servei de backend), per tal d’obtenir accés a aquest darrer servei el primer usarà un proxy ticket. Aquest tiquets s’obtenen al CAS quan el servei que vol l’accés presenta un PGT (Proxy-Granting Ticket) i un identificador de servei que es refereix al servei de backend.
  • Proxy-Granting Ticket (PGT o PGTID): es tracta d’una altre cadena de text que com hem vist al punt anterior l’usa el servei per aconseguir un Proxy Ticket (PT) que li doni accés a un backend service l’accés a aquest servei serà amb les mateixes credencials que l’usuari original, o sigui, el que s’ha autenticat al primer servei.
  • Proxy-Granting Ticket IOU (PGTIOU): com no podia ser d’altre manera és una cadena de text que es passa com a resposta del serviceValidate i del proxyValidate usada per correlacionar un Service Ticket o una validació de Proxy Ticket amb un Proxy-Granting Ticket (PGT) particular.

Ara només queda escoltar el podcast:

[display_podcast]

Els enllaços relacionats amb el podcast:

NOTA: donar les gràcies al Marc Torres per la seva feina, gràcies nano.

gSOAP toolkit SOAP per C/C++

Reading time: 4 – 6 minutes

gSOAP, després de perdre-li la pista durant molt de temps aquesta llibreria de C i C++ crec que és la millor de codi obert i GPL que he trobat. Així doncs, ús la vull recomenar. El nom ve de “SOAP generator” i el va fer un professor, la versió 1.0 va sortir l’any 1999, per tant, podriem dir que l’eina esta més que provada si tenim en compte que va per la versió 2.7.1 que va sortir al gener del 2008.

Per entendre una mica que ofereix aquest toolkit esta molt bé fixar-se en aquest parell de gràfics que donen una visió de l’eina quan l’usem com a servidor SOAP:

gSOAP schema for server mode

i com a client SOAP:

gSOAP schema for client mode

Si haguessim de fer una llista de funcionalitats més detallada i tècnica em quedaria amb la que ofereix la pàgina de l’aplicació:

  • All-in-one package. Independence from third-party tools and libraries ensures successful builds and reliable runtime execution.
  • Open source with several license options.
  • gSOAP supports both pure ANSI C application development and mixed C/C++ application development.
  • gSOAP is the only toolkit that supports XML-to-C/C++ mapping for native C and C++ data types, which means that you can serialize your application data directly instead of having to use wrappers or SOAP/XML-specific data types. Any C or C++ data type can be serialized when it can be specified in a C/C++ header file (except unions). The toolkit automatically serializes pointer-based data structure graphs, including cyclic graphs and pointers to derived class instances to support polymorphism.
  • The toolkit follows the WS-I Basic Profile 1.0a compliance recommendations. It warns about potential interoperability issues before building a new Web service application, so you don’t have to go through another development cycle to make your services compliant. In addition, a report is available to check compliance.
  • Complete support for industry-standard Web services protocols SOAP 1.1/1.2 (RPC and doc/lit), WSDL 1.1, and UDDI v2. Supports XML schema with primitive XSD types, simpleTypes, complexTypes, extension, restriction, elements, attributes, groups, attributeGroups, and arrays (including polymorphic data types and SOAP 1.1 encoding of multi-dimensional sparse arrays). Extensive interoperability testing with other SOAP toolkits resulted in a toolkit release that has proven to be stable, robust, and reliable.
  • Supports SOAP-over-UDP, MIME (SwA), DIME (streaming), MTOM (streaming), HTTP1.0/1.1, IPv4, IPv6, RSS, XML-RPC, WS-Addressing, WS-Enumeration, and many other WS-* protocols.
  • Supports WS-Security: authentication, tokens, digital signatures (XML encryption will be added in the near future).
  • gSOAP is the only toolkit that implements streaming techniques for DIME and MTOM binary attachment transfers. It also supports SOAP with Attachements (SwA) Multipart/related MIME attachments.
  • Fast and efficient because gSOAP uses streaming XML parsing techniques. Typical round-trip SOAP service invocation latencies are below 1ms. Shown to be the fastest SOAP1.1/1.2 compliant C/C++ implementation available (wrt. most common uses we tested).
  • Very portable: Windows, Linux, Unix, Mac OS X, Solaris, HP-UX, AIX, FreeBSD, TRU64, Irix, QNX, VxWorks, MS-DOS. Also portable to handheld devices such as WinCE (Pocket PC), Palm OS, Symbian, and embedded Linux. Clients and server applications can be created that are under 100K with a total memory footprint under 150K.
  • The gSOAP WSDL parser automates server and client application development. gSOAP also generates WSDL documens to publish your services.
  • gSOAP Web Services and clients are just as easy to program as C# and JavaRMI, see How To section below.
  • Serialization of native C and C++ data types allows you also to store and retrieve application data from XML repositories.
  • Includes stand-alone HTTP/1.1 and HTTPS secure Web Server.
  • Offers Apache_mod, IIS, WinInet, CGI, and FastCGI interfaces.
  • Supports HTTP/1.1 POST/GET SOAP/XML messaging with compression, chunking, keep-alive, logging, and SSL encryption.
  • The gSOAP compiler can be conveniently integrated in an IDE. For example, MSVC++ 6.0 project examples with gSOAP integrated in MSVC++ are included in the gSOAP distribution for Windows.
  • Security: supports HTTPS and WS-Security. In addition, the source codes have been carefully written to avoid security holes such as buffer overruns. Also, gSOAP is open source which means that the gSOAP implementation can be verified.
  • gSOAP’s memory management uses garbage collection so (deserialized) data can be cleaned up without a hassle.
  • Company backup for support, licensing, and consulting.
  • Extensive documentation.

1er Barcelona phpWorkShop

Reading time: 4 – 6 minutes

logo Barcelona phpWorkshopAquest cap de setmana en Marc i jo varem ser al Citilab de Cornellà de Llobgregat, no massa lluny de les oficines de movilpoint al primer Barcelona phpWorkShop. S’ha de reconeixer que les instal·lacions del recinte del Citilab estan molt bé i que jo diria que és un d’aquells llocs que et fan sentir orgullós de veure com evoluciona el ‘submón’ que representa, de fet, diria que aquest mural del Citilab té un bon recull de ‘parauletes’ que descriuen on transcorren moltes hores de la meva vida:

Mural del Citilab

Pel que fa les conferencies del phpWorkshop durant el matí varem assistir a la:

  • Motores de Workflow: más allá de las applications CRUD: sobre el tema dels workflows la veritat és que no hi estic gens posat, així doncs per mi això va ser totalment d’introducció. El ezComponents que és sobre el que es varen fer les pràctiques té molt bona pinta i la veritat és que el nivell del conferenciant (em sembla que era en Carlos Buenosvinos) era bo pel poc que varem poder-lo escoltar. Ja que la part pràctica es va reduir molt per problemes de temps. He de reconeixer que a partir d’ara hauré de prendre una mica més d’atenció en aquestes temes ja que poden interessar moltíssim als processos de negoci de l’empresa.
  • VIM, el IDE para PHP: aquest taller com ús podeu imaginar era ple de geeks començant pels conferenciants, però ho varem passar genial i una vegada més i després de més de 10 anys com a usauri de Vi (i després Vim) aquest em va demostrar que no para de sorprendrem. Així doncs, reamlent útil i una molt bona resposta als meus pressuposits de Zend Studio i Eclipse sobre Vim. Malgrat això hi ha problemes inherents a l’editor que no em permeten obligar a cap dels programadors que tenim a treballar amb eines amb curves d’aprenentatge tan llargues en el temps. Per no parlar de la facilitat en la que les coses s’oblidaran. Una molt bona nota pel taller.

i a la tarda a:

  • AJAX, hazle un “lifting” a tus páginas: aquesta conferència es va realitzar en una sala inmensa i en Marc i jo erem a la part del darrera de tot de la sala i no es sentia res de res, era impossible escoltar el que deia el conferenciant i seguir el que apareixia al projector. Malgrat això em va permetre descobrir el YUI molt més a fons i realment em va agradar moltíssim. He de reconeixer que l’Ernest tenia raó quan sempre em deia que els llibreries de JavaScript de Yahoo! era molt bones. Tot i que jo mai m’hi havia posat tan a fons. Ara el que toca és aprofundir més en el tema.

L’última conferència sobre XSS es realitzava a la mateixa sala i com que ja portavem tot el dia al Citilab varem decidir marxar. Ja que era molt difícil disfrutar-la en aquelles condicions. Tot i així he de posar una molt bona nota a l’organització de l’event. Malgrat l’ensurt que em van donar el dijous amb un email dient que no havia fet l’ingrés dels diners de l’event quan això no era així. Però finalment tot va acabar en això, un ensurt. A veure si l’any que ve podem repetir l’experiència i si a partir d’ara m’animo a disfrtuar més d’aquest gran espai que és el Citilab.

python trick: compartir directori via HTTP

Reading time: 3 – 5 minutes

A vegades estant en la propia LAN, suem tinta per dir-li a un usuari de windows com ho ha de fer per agafar un fitxer d’un directori del nostre linux. Si teniu python instal·lat, normalment totes les distribucions l’instal·len per defecte a més del paquet HTTP. Podeu fer una cosa tan simple com posar al .bashrc:

alias quickweb='python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"'

Ara aneu al directori on voleu compartir els fitxers i escriviu: quickweb. Això obrirà el vostre port 8000 i qualsevol usuari de la xarxa podrà connectar-se amb el navegador a la vostre IP pel port 8000. Allà es pot veure i descarregar els fitxers que hi teniu. Quan volgueu deixar de compartir el directori només cal fer un Control+C i llestos.

Realment una xorrada molt i molt útil, no? si voleu comprovar què esteu compartint ja ho sabeu: http://127.0.0.1:8000. Més senzill impossible.

accTable: Llibreria per paginar dades amb PHP i AJAX

Reading time: 1 – 2 minutes

Malgrat fa molt de temps que no programo amb PHP ‘a pel’, és a dir, sense passar per Symfony ahir l’Albert em va fer saber que s’ha currat una llibreria en PHP que permet mostrar dades de forma paginada amb la usabilitat que ens dona AJAX i que és senzillíssima d’usar. Si no disposeu d’un framework que ús ofereixi una solució decent a aquest problema la solució de l’Albert és molt elegant i decent, ús la recomano.

accTable.png

accTable Project: lliberia PHP amb suport d’AJAX per mostrar dades paginades, feta per l’Albert Coronado.

Albert, la meva recomanació seria que li donessis la forma de plugin i l’elavoressis per diferents frameworks, per exemple, per Symfony.

IMPORTANT correcció: perdoneu l’errada però la llibreria és purament AJAX, o sigui, JavaScript obviament es pot usar igual en PHP que en qualsevol altre llenguatge. Demano disculpes per l’errada.

Binding SSH des de PHP

Reading time: 2 – 2 minutes

Mai m’hagués imaginat que arribaria a poder fer coses tan interessants i de forma tan neta des del PHP, però pel que he pogut comprobar és força senzill. El que necessitava era poder fer SCPs des del PHP. Doncs bé, hi ha un mòdul de PHP que permet fer no noés això sinó fins hi tot SSH i autenticacions tan via paraula de pass com via clau pública-privada. Realment útil.

Si com jo esteu interessant en aquesta idea, la pròpia web de PHP en té un manual de com programar amb PHP usant funcions d’SSH. Però si voleu començar pel principi i a més voleu alguns exemples molt senzills una bona recomanció és el howto (local) d’en Kevin van Zonneveld realment senzill i útil. Jo ho he montat en una Ubuntu Server Dapper 6.06 LTS, ho comento perquè quan ell diu que instal·leu el paquet openssl-dev, no existeix en el sistema que he usat. Cal que instal·le libssl-dev en el seu lloc i tot funcionarà bé. També comentar que només m’ha funcionat amb la llibreria libssh-0.14 les versions més noves donen erros de compilació al mòdul SSH2 de PHP.

Imprimir color de fons en una taula HTML

Reading time: 8 – 13 minutes

Com molts sabreu, sobretot els que ho heu intentat. Si tenim una pàgina web amb una taula que té algún color de fons o imatge al enviar-la a la impresora aquesta no s’imprimeix. Només és possible imprimir la lletra i el contorn de la taula. Doncs bé, alguna vegada es pot tenir la necessitat que això passi. Aquí és on comença el problema i on intento explicar la solució que em van donar l’Oriol i la Sara.

La idea és per exemple, tenir una taula tan simple com aquesta:

screen.png

Gràcies al següent codi HTML i CSS. Podriem tenir la vista anterior per pantalla i el color de fons blavós que es veu a la captura del final de l’article a l’imprimir:

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
	<head>
		<title>PROVA</title>
		<style media='screen'>
		
		</style>
		<style media='print'>
		
		</style>
	</head>
	<body>
		<table>
			<tr><td class='capçalera'>
				<div><span>TITULO</span></div>
			</td></tr>
			<tr><td >
				alsjfaljfaljflask
			</td></tr>
			<tr><td >
				Salñsjfalñjfdalñskf
			</td></tr>
		</table>
	</body>
</html>

Descarregar el codi.

La taula imprimida quedaria així:

print.png
<div style="text-align: center;"></div>

Com podeu veure el que fa el codi CSS és jugar amb les cantonades de la taula que si que s’imprimeixen, llavors els dona el suficient gruix com perquè pintin tota la capçalera i finalment col·locant el text al damunt de les cantonades perquè doni la sensació que esta al seu lloc. Un gran eginy realment, llàstima que no hi hagi res més elegant per fer-ho.

Trick per Subversion

Reading time: 8 – 13 minutes

Fa temps que no escribia coses tècniques així que per anar fent boca aquí va un petit truquillo pel Subversion.

Si sou usuaris de línia de comandes del SVN quan esteu programant un projecte i no sabeu quins fitxers no heu pujat al repositori sabeu que podeu fer un:

svn status

I això ús mostra una llista dels fitxers que s’ha modificat i dels que no han estat afegits al repositori, doncs ara ve un petit script per afegir-los tots de cop:

for F in $(svn status | grep "?" | cut -c 8-);
do
  svn add $F;
done

Ara ja podem fer un commit i no em d’anar recorrent tots els directoris i fitxers per afegir-los al repositori.

PHPClasses: VirtualCron, GoogleMaps i InsertFTP

Reading time: 2 – 2 minutes

A través de PHPClasses he trobat aquestes tres classes de PHP que tenen bona pinta així que espero que algún dia li facin servei a algú o a mi mateix:

  • Insert FTP: This class can be used to manage FTP user accounts stored in a MySQL database.It can connect to a MySQL server that has a database of FTP user accounts used by FTP servers like pure-ftpd. It can: add new user accounts, block an user, change account quotas, retrieve the details of an FTP user account.
  • Karatag Google Maps HTTP Request: The Google Maps API is mostly known for being able to present maps of anywhere in the world in any Web site. However, Google Maps API is also able to provide other interesting features, like determining the geographic coordinates of a given address. This class uses the Google Maps API just for the purpose of determining the location associated to an address from PHP programs.
  • Virtual Cron: Many Web applications need to execute periodical tasks, like sending newsletters, processing pending e-commerce orders, etc. Some operating systems come with programs, like cron or at, to execute scheduled tasks. However, under some Web hosting environments these programs cannot be used. This class provides an alternative solution that can be used in more restricted hosting environments. It uses files to keep track of the last time when a periodical task was executed. The site Web page scripts can use the class to check these files. The class can tell when it is time to execute a task again. When it is time, the same script can execute the scheduled task without depending on external programs.

Python trick: error Address already in use

Reading time: 8 – 12 minutes

Quan treballem amb sockets en python sovint al publicar un port si matem el procés que publicava el port encara que sigui de forma correcte ens trobem que al llençar-lo de nou, o sigui, a l’intentar publicar altre cop el procés aquest dona error un error que diu algo així com Address already in use. O sigui, que el sistema operatiu es pensa que el port encara esta sent publicat pel procés que ja em matat. Si fem un netstat veiem que el port no hi és, però encanvi fins al cap d’una estoneta (alguns segons o minuts) no hi ha manera de poder usar de nou aquest port.

Doncs bé, un petit truquillo perquè això no passi i el poguem usar a l’instant és fer això després de crear l’objecte de la classe socket:

# creació de l'objecte
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# afegim noves propietats a l'objecte
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Scroll to Top