Tutorial Básico SimpleSAMLphp

Exemplo Aplicação com Autenticação Federada para Usuários da UFRGS


Autor: Rui Ribeiro
Atualização: 08/07/2011
Revisão: 3

Sumário


1. Introdução
2. Exemplo de Aplicação PHP integrada com o SimpleSAML
3. Descrição dos atributos retornados na autenticação

Introdução


O SimpleSAMLphp (SimpleSAML) [1] é uma ferramenta escrita em PHP, compatível com o Shibboleth, que trata das questões relativas a autenticação. Muito embora o SimpleSAML possa atuar tanto como Identity Provider (IdP) quanto como Service Provider (SP) este tutorial ficará restrito a segunda opção, ou seja, SP.

Este tutorial apresenta um exemplo de aplicação que utiliza a autenticação federada (Shibboleth) para realizar a identificação de um usuário.

Voltar ao sumário

Exemplo de Aplicação PHP integrada com o SimpleSAML


Nas linhas a seguir é apresentado o código fonte de uma aplicação escrita em PHP e que utiliza-se do SimpleSAML para fazer o controle de acesso. O comportamento esperado da aplicação é o seguinte:
  1. Ao ser acessado, o index.php identifica se o usuário está autenticado. Caso não esteja, o usuário é informado que para fazer a autenticação deve clicar em um botão.
  2. Após clicar no botão, o usuário recarrega o index.php com a variável autenticar definida.
  3. Ao identificar que a variável autenticar está definida, o index.php exige a autenticação (linha $as->requireAuth()) e redireciona o usuário para a página de autenticação da UFRGS.
  4. Após se autenticar, o usuário retorna para o index.php.
  5. O index.php ao identificar que o usuário está autenticado, exibe os atributos retornados após a autenticação.
Tal aplicação utiliza-se ainda dos atributos disponibilizados pelos SimpleSAML e os imprime na tela. Para utilizar o código a seguir, cole-o no arquivo index.php que deverá ficar na pasta aplicacao


<?php
define("UID",           'urn:oid:0.9.2342.19200300.100.1.1');
define("CN",            'urn:oid:2.5.4.3');
define("MAIL",          'urn:oid:0.9.2342.19200300.100.1.3');
define("UFRGSVINCULO",  'urn:oid:1.3.6.1.4.1.12619.200.1.1.15');

require_once('../ss-portal-teste-simplesaml/lib/_autoload.php');

//define que deve ser utilizada a autenticacao shibboleth
$as = new SimpleSAML_Auth_Simple('default-sp');

if (isset($_POST[autenticar])) {
  $as->requireAuth();
}
?>

<HTML>
<HEAD>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
<TITLE>Portal Teste SimpleSAML XYZ</TITLE>
</HEAD>
<BODY>
<FONT FACE="Vedana">

<H1>Bem Vindo ao Portal Teste SimpleSAML</H1>
<EM>Atualização: 07/07/2011</EM><BR>
<HR>

<H2>Acesso Federação UFRGS-TESTE</H2>

<?php
$attributes = $as->getAttributes();
if (empty($attributes[UID][0])) {
?>
Você não está autenticado na Federação UFRGS-TESTE!<br>
Clique no botão a seguir para efetuar login<br>

<form id="form1" name="form1" method="post" action="index-new.php">
<input name="autenticar" type="hidden" id="autenticar">
<input type="submit" value="UFRGS-TESTE">
</form>

<?php
}
else {
print(htmlspecialchars( "Olá " . $attributes[CN][0] . "!" ) ."<br><br>" );
print(htmlspecialchars( "Tu estás logado na Federação UFRGS-TESTE.") . "<br>" );
print(htmlspecialchars( "Teus atributos são os seguintes:" ) . "<br><br>" );
print(htmlspecialchars( "uid: " . $attributes[UID][0]) . "<br>");
print(htmlspecialchars( "cn: " . $attributes[CN][0]) . "<br>");
print(htmlspecialchars( "mail: " . $attributes[MAIL][0]) . "<br>");
for ($i=0; $i<count($attributes[UFRGSVINCULO]); $i++)
  print(htmlspecialchars( "ufrgsVinculo ". $i .": " . $attributes[UFRGSVINCULO][$i]) . "<br>");
}
?>

</FONT>
</BODY>
</HTML>
A aplicação demonstrada ao longo deste tutorial está acessivel através do endereço http://sp.ufrgs.br/aplicacao/ (abre em nova janela).
Para fazer a autenticação deve-se usar usuário e senha 99999999 que refere-se a um usuário fictício e que está presente apenas no LDAP de testes.

Voltar ao sumário

Descrição dos atributos retornados na autenticação


Esta seção apresenta a descrição dos atributos retornados no ato da autenticação

O campo uid corresponde ao número do cartão do usuário que está autenticando.

O campo cn contém o nome completo do usuário, normalmente em caixa alta.

O campo mail contém o endereço de e-mail do usuário que está cadastrado no portal de serviços. Quando da alteração do e-mail, o novo endereço estará disponível no proximo login do usuário, dessa forma indicamos sempre atualizar o endereço de e-mail a cada login caso ele seja armazenado localmente.

O campo ufrgsVinculo retorna uma string que é constituída pelos seguintes elementos:

estadoVinculo:codVinculo:nomeVinculo:codOrgaoExercicio:nomeOrgaoExercicio:codOrgaoLotacao:nomeOrgaoLotacao:codCurso:nomeCurso:dataIngresso:dataAfastamento
Esta nomenclatura foi definida pelo CPD da UFRGS e deve ser utilizada quando os dados forem exibidos. O CPD se reserva a modificar qualquer um dos campos textuais, portando apenas os dados vindos da autenticação devem ser utilizados para exibição. Este é um dos motivos pelo qual não é recomendado armazenar estes dados locamente para consultas futuras.

Voltar ao sumário