Login único em vários domínios

Nossa empresa tem vários domínios configurados com um website hospedado em cada um dos domínios. Neste momento, cada domínio tem sua própria autenticação, que é feita através de cookies.

Quando alguém conectado a um domínio precisa acessar qualquer coisa do outro, o usuário precisa efetuar login novamente usando credenciais diferentes no outro site, localizado no outro domínio.

Eu estava pensando em ir em direção ao logon único (SSO), para que esse aborrecimento possa ser eliminado. Eu apreciaria qualquer idéia de como isso poderia ser alcançado, já que não tenho nenhuma experiência nesse sentido.

Obrigado.

Edit: Os sites são mix de sites de internet (externos) e intranet (internos usados ​​na empresa).

    A solução de SSO que implementei aqui funciona da seguinte maneira:

    1. Existe um domínio principal, login.mydomain.com com o script master_login.php que gerencia os logins.
    2. Cada domínio do cliente tem o script client_login.php
    3. Todos os domínios possuem um database de session do usuário compartilhado.
    4. Quando o domínio do cliente exige que o usuário esteja logado, ele redireciona para o domínio principal (login.mydomain.com/master_login.php). Se o usuário não tiver entrado no mestre, ele solicitará autenticação do usuário (ou seja, página de login de exibição). Depois que o usuário é autenticado, ele cria uma session em um database. Se o usuário já estiver autenticado, procurará o id de sua session no database.
    5. O domínio principal retorna ao domínio do cliente (client.mydomain.com/client_login.php) passando o ID da session.
    6. O domínio do cliente cria um cookie que armazena o ID da session do mestre. O cliente pode descobrir o usuário conectado consultando o database compartilhado usando o ID da session.

    Notas:

    • O id da session é um identificador global exclusivo gerado com o algoritmo da RFC 4122
    • O master_login.php só irá redirect para domínios em sua lista de permissions
    • O mestre e os clientes podem estar em diferentes domínios de nível superior. Por exemplo. client1.abc.com, client2.xyz.com, login.mydomain.com

    Não reinvente a roda. Há vários pacotes SSO de domínio cruzado de código aberto, como JOSSO, OpenSSO, CAS, Shibboleth e outros. Se você estiver usando a tecnologia Microsoft em todo o (IIS, AD), poderá usar a federação da Microsoft (ADFS).

    Quão diferentes são os nomes de host?

    Esses hosts podem compartilhar cookies:

    Mas estes não podem:

    No primeiro caso, você pode usar uma solução baseada em cookie. Pense GUID e uma tabela de session de database.

    Se você usa o Active Directory, você poderia ter cada aplicativo usando AD para autenticação, o login poderia ser perfeito.

    Caso contrário, se os aplicativos puderem se comunicar nos bastidores, você poderá usar os sessionids e ter um aplicativo que gerencie a geração de ID, atendendo a todos os outros aplicativos.