
Nosso Apache usa mod_shib_24 (SAML-SP) e mod_auth_openidc (OIDC-RP), ambos conectados a um Shibboleth IdP (atua como SAML-IDP e OIDC-OP).
Além disso, temos 2 locais protegidos, um protegido por SAML e outro protegido por OIDC:
ShibCompatValidUser On
<Location "/">
Require shib-session
AuthType Shibboleth
ShibRequestSetting requireSession 1
ShibUseHeaders On
</Location>
<Location "/oidctest">
Require valid-user
AuthType openid-connect
</Location>
Agora vem a parte confusa:
Se eu acessar qualquer coisa diferente de /oidctest/, tenho que fazer login usando SAML (mod_shib_24 é envolvido, como esperado), mas após uma autenticação bem-sucedida também posso acessar /oidctest/ sem precisar autenticar com OIDC.
Isso também funciona ao contrário. Se eu acessar /oidctest/ primeiro (nova janela privada), terei que autenticar usando OIDC (mod_auth_openidc se envolve, conforme esperado) e, após uma autenticação bem-sucedida, também posso acessar todos os outros locais (exceto /oidctest/).
Então, como o Apache lida com diretivas de usuário válido? Como um “usuário válido” é definido no Apache?
Um usuário é válido para tudo depois de fazer login, não importa o tipo de autenticação, não importa o módulo, não importa o protocolo?
Ou este é um comportamento inesperado?
Responder1
Pelo que entendi no wiki do Shibboleth, oShibCompatValidUser ativadoconfigurações são expressamente destinadas a serem compatíveis comrequer usuário válidodeclarações.
Antes da V2.5.2, e quando ShibCompatValidUser está desativado (o padrão), isso é equivalente à regra de sessão shib acima. Quando a opção ShibCompatValidUser está habilitada, esta regra é implementada de forma compatível com a regra implementada pelo próprio Apache e requer que um valor REMOTE_USER não nulo seja definido para a solicitação. Isso restaura a capacidade de implantar o Shibboleth junto com outros módulos e regras. Uma versão futura do SP poderá remover a definição "especial" e tais regras deverão ser alteradas para se basearem na sessão shib.
Verhttps://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPhtaccess
Para diferenciar os módulos você também pode usar testes comExigir ambientepara procurar variáveis de ambiente definidas pelo módulo. Shibboleth por padrão define umID da sessão Shibpor exemplo.
Verhttps://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPAttributeAccess