O Discourse integrou o DiscourseConnect, que permite transformar seu Discourse em um provedor de SSO. Você pode encontrá-lo no artigo “Usando o Discourse como provedor de identidade (SSO, DiscourseConnect)”. No entanto, o que ele oferece não é um protocolo padrão SAML ou Oauth.
Portanto, precisamos usar um módulo criado por Paul B. no fórum do Discourse. Este é um módulo que nos permite conectar o DiscourseConnect ao SimpleSAMLphp e, em seguida, usar o SimpleSAMLphp para fornecer um protocolo de serviço de login SAML padrão. Aqui, quero agradecer imensamente por sua ajuda, que tornou isso possível. Você também pode encontrar o módulo aqui:
Agora vamos começar o guia.
Primeiro, precisamos configurar o SimpleSAMLphp.
Baixe o SimpleSAMLphp primeiro.
wget https://simplesamlphp.org/download?latest
E então descompacte.
tar zxf download?latest
Em seguida, mova o arquivo para /var/simplesamlphp.
sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/
Em seguida, dê a esta pasta ao usuário www-data e permissão 755.
sudo chown -R www-data:www-data /var/simplesamlphp/
sudo chmod -R 755 /var/simplesamlphp/
Você pode perguntar por que o caminho deve ser /var/simplesamlphp, porque a documentação oficial está aqui, você precisará de configuração extra se colocá-lo em outro lugar.
Em seguida, configure o nginx e aponte o index para /www em sua pasta. Se você estiver usando o Apache, procure a configuração na documentação oficial.
upstream saml-php-handler {
server unix:/run/php/php8.0-fpm.sock;
}
server {
listen 443 ssl;
server_name SEU_DOMINIO_SAML;
index index.php;
ssl_certificate SEU_CERTIFICADO;
ssl_certificate_key SUA_CHAVE;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
location ^~ /simplesaml {
alias /var/simplesamlphp/www;
location ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$ {
include fastcgi_params;
fastcgi_pass saml-php-handler;
fastcgi_param SCRIPT_FILENAME $document_root$phpfile;
# Must be prepended with the baseurlpath
fastcgi_param SCRIPT_NAME /simplesaml$phpfile;
fastcgi_param PATH_INFO $pathinfo if_not_empty;
}
}
}
Em seguida, atualize sua fonte:
sudo apt update
Em seguida, instale o pacote de software:
sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached
Observação: aqui é necessário que você instale de acordo com sua versão do php. Por exemplo, se você estiver usando php8.0, precisará adicionar “8.0” após todo o “php”. Como: php8.0-xml
Reinicie o Nginx para ativar a nova extensão php após a instalação ter sido concluída:
sudo systemctl restart Nginx
Em seguida, gere um salt:
openssl rand -base64 32
Copie este salt.
Em seguida, abra /var/simplesamlphp/config/config.php
'auth.adminpassword',SUA_SENHA;
'secretsalt',SEU_SALT;
'technicalcontact_name',SEU_NOME;
'technicalcontact_email' ,SEU_EMAIL;
'language.default',MUDE_PARA_SEU_IDIOMA;
'timezone',MUDE_PARA_SUA_AREA;
'enable.saml20-idp' => true,
Em seguida, abra https://SEU_DOMINIO_SAML/simplesaml, teoricamente seu SimpleSAMLphp deve estar funcionando agora.
Em seguida, instale o Composer.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/bin/composer
Em seguida, você deve digitar composer para executar.
Vá para /var/simplesamlphp, edite composer.json, mude a versão para dev-master.
O motivo pelo qual fazemos isso aqui é porque o módulo discourse-simplesamlphp requer a versão “dev-master”, no entanto, sua versão padrão é um número, então precisamos mudar a versão para “dev-master”.
Em seguida, comece a instalar este módulo.
composer require swcc/simplesamlphp-module-authdiscourse dev-master --ignore-platform-reqs
O parâmetro “–ignore-platform-reqs” é para evitar que sua versão do php não corresponda ao requisito.
Agora você verá o composer começar a instalar swcc/simplesamlphp-module-authdiscourse.
Após a conclusão da instalação, digite:
touch /var/simplesamlphp/modules/authdiscourse/enable
Para habilitar este plugin.
Em seguida, habilite as opções “segredos do provedor de connect do discourse” e “habilitar provedor de connect do discourse” em seu fórum Discourse.
Em “segredos do provedor de connect do discourse”, insira seu domínio SAML e um segredo sso.
Em seguida, edite config/authsources.php na pasta simplesamlphp:
<?php
$config = [
// This is a authentication source which handles admin authentication.
'admin' => [
'core:AdminPassword',
],
// This is the authentication source using the Discourse authentication.
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'https://discourse.your-domain.org',
'secret' => 'seu-segredo-sso',
],
];
Você precisa adicionar esta parte ao local adequado:
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'SEU_DOMINIO_DISCOURSE',
'secret' => 'SEGREDO_SSO_DISCOURSE',
],
Para permitir que o SimpleSAMLphp use o discourse-sso para autenticação.
Finalmente, abra https://SEU_DOMINIO_SAML/simplesaml/module.php/core/authenticate.php?as=discourse-sso
OU
Abra https://SEU_DOMINIO_SAML/simplesaml/ e clique em authentication e depois em discourse-sso para testar.
Se ele retornar as informações corretas, significa que você configurou com sucesso seu SimpleSAMLphp para se conectar ao seu Discourse.
Agora você precisa configurar suas configurações de IDP.
Primeiro, você precisa gerar um certificado para o IDP usando:
openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out SEU_DOMINIO_SAML.crt -keyout SEU_DOMINIO_SAML.pem
Se você o gerar no diretório raiz, poderá ver seu novo certificado lá.
Em seguida, mova seu certificado para onde desejar, em seguida, dê-os ao usuário www-data e permissão 755.
chown -R www-data:www-data /CAMINHO_DO_SEU_CERTIFICADO
chmod -R 755 /CAMINHO_DO_SEU_CERTIFICADO
Finalmente, edite seu caminho de certificado e sua fonte de autenticação em metadata/saml20-idp-hosted.php.
<?php
$metadata['__DYNAMIC:1__'] = [
/*
* The hostname for this IdP. This makes it possible to run multiple
* IdPs from the same configuration. '__DEFAULT__' means that this one
* should be used by default.
*/
'host' => '__DEFAULT__',
/*
* The private key and certificate to use when signing responses.
* These are stored in the cert-directory.
*/
'privatekey' => '/CAMINHO_DA_SUA_CHAVE',
'certificate' => '/CAMINHO_DO_SEU_CERTIFICADO',
/*
* The authentication source which should be used to authenticate the
* user. This must match one of the entries in config/authsources.php.
* NOTICE: YOU NEED TO CHANGE THE AUTH METHOD TO "discourse-sso"
*/
'auth' => 'discourse-sso',
];
Agora seu SimpleSAMLphp está usando o Discourse como backend de banco de dados de usuários, como um IDP SAML, fornecendo o protocolo de login SAML padrão.
ID do IDP (URI): https://SEU_DOMINIO_SAML/simplesaml/saml2/idp/metadata.php
URL de Destino (Usado para enviar requisito de identidade SP): https://SEU_DOMINIO_SAML/simplesaml/saml2/idp/SSOService.php
Certificado X509: https://SEU_DOMINIO_SAML/simplesaml/module.php/saml/idp/certs.php/idp.crt
Ou para aqueles SP que permitem que você carregue o arquivo de Metadados do IDP diretamente, você pode baixar os Metadados do IDP: https://SEU_DOMINIO_SAML/simplesaml/saml2/idp/metadata.php
Tudo pronto. Tudo deve estar funcionando agora.
Aproveite~
Em seguida, posso apresentar como conectar o SimpleSAMLphp, alimentado pelo Discourse, como forma de login SAML do NextCloud.
Qualquer coisa que não tenha sido entendida pode ser respondida neste post ou você pode entrar em contato comigo via admin@rail.moe.