Histórico da Página
...
sso
|- etc ( Arquivos de configuração do SAML, certificados e chaves privadas )
|- lib ( Libs necessárias para a execução da libsamlsp )
|- share
|- xml ( Arquivos schema para validar os XML's de configuração e os assertions )
|- var
|- cache ( Cópia local dos arquivos de configuração dos IDP's configurados )
|- log ( Arquivos de log da libsamlsp, libsaml, libxmltooling, libxml-security, libxerces )
2 - Copiar o arquivo invoker-applet.zip para o diretório "PATH" que é configurado na sessão HTTP do arquivo de configuração do Application Server.3 - Habilitar o servidor HTTP e HTTPS no Application Server para executar os testes.
...
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
[HTTP]
ENABLE=1
PORT=80
SessionTimeout=36000
SAMLSessionName=localhost_http_80
[HTTPS]
ENABLE=1
PORT=443
PATH=D:\Desenvolvimento\Protheus\web\ws
SessionTimeout=36000
SAMLSessionName=localhost_https_443
[localhost/webex]
ENABLE=1
PATH=\Totvs\bin\appserver\web\ws
ENVIRONMENT=SEU_AMBIENTE
INSTANCENAME=webex
RESPONSEJOB=job_webex
[job_webex]
enable=1
type=webex
instances=1,5,1,1
INSTANCENAME=webex
environment=SEU_AMBIENTE
ONSTART=STARTWEBEX
ONCONNECT=CONNECTWEBEX
ONEXIT=FINISHWEBEX
[ONSTART]
jobs=job_webex
REFRESHRATE=30 |
5 3 - Configurando o Service Provider usando o servidor:
53.1 - Alterar o entityID do ServiceProvider: setSAMLID.
53.2 - Alterar o entityID do IdentityProvider: setSAMLID.
53.3 - Configurar o Service Provider para recuperar automaticamente o arquivo de configuração do Identity Provider: setIDPConf.
5 3.4 - Inserir e configurar o Service Provider para utilizar sua versão de certificado digital no formato PEM X.509: setSPCert.
...
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#include 'protheus.ch' #include 'fileio.ch' user function setIdpShib() local error // http://tdn.totvs.com/display/tec/setSAMLID if setSAMLID("https://localhost/webex/", 1, @error) == .F. ConOut("Error setSAMLID: " + error) return endif // http://tdn.totvs.com/display/tec/setSAMLID if setSAMLID("https://samltest.id/saml/idp", 2, @error) == .F. ConOut("Error setSAMLID: " + error) return endif // http://tdn.totvs.com/display/tec/setIDPConf if setIDPConf("https://samltest.id/saml/idp", "samltest.id.metadata.xml", @error) == .F. ConOut("Error setIDPConf: " + error) return endif // http://tdn.totvs.com/display/tec/setSPCert if setSPCert("certfile.pem", readFile("certificate.pem"), "keyfile.pem", readFile("key.pem"), @error) == .F. ConOut("Error setSPCert: " + error) return endif return static function readFile(FileName) local FileSize Local Readed local Register := "" local hArq := FOpen(FileName) If hArq == -1 ConOut("Error:" + Str(FError()) + ", Error opening file '" + FileName + "'") return nil EndIf FileSize := FSEEK(hArq, 0, FS_END) FSEEK(hArq, 0, FS_SET) Readed := fRead(hArq, @Register, FileSize) If Readed <> FileSize ConOut("Error:" + Str(FError()) + ", Error reading file '" + FileName + "'") return nil Endif fclose(hArq) return Register |
6 4 - Execute a user function setIdpShib no smartclient, usando a função inicial U_SETIDPSHIB.
A execução criará os seguintes arquivos no diretório sso/etc: serviceprovider.xml , certfile.pem e keyfile.pem.
7 5 - Configurando o Identity Provider para fornecer identidades para o Service Provider.
...
O Arquivo XML que contém a configuração do Service Provider pode ser utilizado para configurar o Identity Provider automaticamente, mais adiante, tem um exemplo de como fazer isso com o IDP da Shibboleth.
75.1 - A URL do serviço que retorna o arquivo XML de configuração é a mesma configurada como entityID do SP, só é necessário acrescentar o caminho "/saml2/metadata", utilizando o entityID do exemplo acima a URL ficaria assim: https://localhost/webex/saml2/metadata.
...
Baixar o arquivo XML de configuração do Service Provider ( https://localhost/webex/saml2/metadata ).
2º Passo:
Acesse o site do IDP da Shibboleth e faça o upload do XML de configuração do SP ( https://samltest.id/upload.php )
Neste site temos dois passos simples:
Botão "Choose File" ou "Escolher Ficheiro", abre uma janela para selecionar o arquivo de configuração do SP ( Selecione o XML de configuração do SP baixado no 1º Passo).
Botão "Upload", faz o upload e faz a federação do IDP com o SP.
8 6 - Importante.
Para testar o IDP no site de testes https://samltest.id/saml/idp será necessário editar o arquivo sso\etc\security-policy.xml. Inclua a tag <PolicyRule type="NullSecurity"/> na TAG <Policy id="default" validate="false"> conforme o exemplo abaixo. A mesma não deve ser usada quando estiver usando um provedor IDP em ambiente de produção, pois, ela diminui o nível de segurança.
...
<SecurityPolicies |
---|
...
xmlns="urn:mace:shibboleth:2.0:native:sp:config"> |
---|
...
<Policy id="default" |
---|
...
validate="false"> |
---|
...
... <!-- Identified by type="NullSecurity", |
---|
...
enables |
---|
...
debugging |
---|
...
by |
---|
...
disabling |
---|
...
security |
---|
...
and |
---|
...
permitting |
---|
...
unauthenticated |
---|
...
messages |
---|
...
to |
---|
...
pass |
---|
...
successfully |
---|
...
into |
---|
...
higher |
---|
...
layers. |
---|
...
--> |
---|
...
|
---|
...
</SecurityPolicies> |
---|
7 9 - Testando o Service Provider
A URL do serviço SAML é mesma configurada como entityID do SP, só é necessário acrescentar o caminho "/saml2/get/totvssmartclient" ( Desktop ) ou "/saml2/get/url?url_do_serviço_web" ( Web ).
Exemplos:
Desktop:
https://localhost/webex/saml2/get/totvssmartclient/default.htm
...
Aviso | ||
---|---|---|
| ||
Para versões igual ou superior ao Lobo Guará é necessário inserir a pagina "default.htm" no fim da requisição para abertura do smartclient. Caso isso não seja inserido, o server tentará carregar a página default configurada no appserver.ini e isso poderá ocasionar na não abertura do smartclient. |
Web:
97.1 - Criar um programa para testes.
Crie e compile um programa para devolver data e hora
...
language | cpp |
---|---|
firstline | 1 |
linenumbers | true |
...
#include'totvs.ch' userfunction |
---|
horaAtual() |
---|
...
return"Hora atual >>" + TIME() + "<<" |
---|
Obs. No cenário web, é necessário que a URL do serviço web seja previamente cadastrada (setSAMLSvc) ou inclua os sites a serem acessados no arquivo sso\etc\services.conf.
Caso contrário será apresentado o erro "URL not allowed".
97.2 - Incluir os sites a serem acessados usando a função setSAMLSvc ou editando o arquivo sso\etc\services.conf.
...
language | cpp |
---|---|
firstline | 1 |
linenumbers | true |
. O servidor deve ser inicializado após esta operação.
...
97.3 - Para testar o ambiente, inicie o Application Server e acesse este link: https://localhost/webex/saml2/get/url?http://localhost/webex/u_horaatual.apw
Obs. Se tudo foi configurado corretamente, quando você executar o passo acima, você será redirecionado para a página de login do IDP, após o login, o IDP vai te redirecionar para página do SP e se o processo de validação da resposta SAML ( assertion ) foi concluído com sucesso, o SmartClient Desktop ou a página web será aberta, caso contrário será apresentado um erro na página.
...