Pergunta

Vamos dizer que você tem sites www.xyz.com e www.abc.com.

Digamos que um usuário vai para www.abc.com e eles se autenticadas com o normal ASP .NET provedor de associação.

Então, a partir desse site, eles são enviados para (redirecionamento, vinculada, o que funciona) site www.xyz.com e a intenção do site www.abc.com foi para passar o usuário para outro site como o status de isAuthenticated, para que o site www.xyz.com não pede as credenciais de utilizador novamente.

O que seria necessário para que isso funcione?Eu tenho algumas restrições sobre isso, porém, as bases de dados de utilizador estão completamente separados, ela não é interna a uma organização, em todos os aspectos, é como passar de stackoverflow.com para o google como autenticadas, é que separadas na natureza.Um link para um artigo em questão será suficiente.

Foi útil?

Solução

Tente usar FormAuthentication definindo a web.config seção autenticação, como por exemplo:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" requireSSL="true" 
      protection="All" 
      enableCrossAppRedirects="true" />
</authentication>

Gerar uma chave de computador.Exemplo: Maneira mais fácil de gerar MachineKey – Dicas e truques:ASP.NET, O IIS ...

Ao enviar para outro aplicativo, o tíquete de autenticação é passado como um campo oculto.Ao ler o post do primeiro aplicativo, o segundo aplicativo leia a permissão criptografada e autenticar o usuário.Aqui está um exemplo da página que passa, que envia o campo:

.aspx:

<form id="form1" runat="server">
  <div>
    <p><asp:Button ID="btnTransfer" runat="server" Text="Go" PostBackUrl="http://otherapp/" /></p>
    <input id="hdnStreetCred" runat="server" type="hidden" />
  </div>
</form>

code-behind:

protected void Page_Load(object sender, EventArgs e)
{
    FormsIdentity cIdentity = Page.User.Identity as FormsIdentity;
    if (cIdentity != null)
    {
        this.hdnStreetCred.ID = FormsAuthentication.FormsCookieName;
        this.hdnStreetCred.Value = FormsAuthentication.Encrypt(((FormsIdentity)User.Identity).Ticket);
    }
}

Veja também a cruz aplicativo de autenticação de formulários do Capítulo 5 deste livro da Wrox.Recomenda-se respostas como os acima, além de fornecer um homebrew solução de SSO.

Outras dicas

Se você estiver usando o construído em sistema de associação que você pode fazer cross sub-domínio de autenticação com formas de autenticação usando alguns, como este, em cada web.config.

<authentication mode="Forms">
    <forms name=".ASPXAUTH" loginUrl="~/Login.aspx" path="/" 
                  protection="All" 
                  domain="datasharp.co.uk" 
                  enableCrossAppRedirects="true" />

</authentication>

Certifique-se de que o nome, o caminho, a proteção e o domínio são os mesmos em toda a web.configs.Se os sites estão em máquinas diferentes, você também vai precisar para assegurar que o machineKey e chaves de criptografia e validação são os mesmos.

Se você armazenar as sessões de usuário no banco de dados, você pode simplesmente verificar a existência do Guid na tabela a sessão, se ele existe, então o usuário já estiver autenticado no domínio.Para que isso funcione, você teria incluído a sessão guid na URL quando você redirecionar o usuário para outro site.

Não sei o que você usaria para .NET mas normalmente eu usaria o memcached em uma LÂMPADA de pilha.

A resolução depende do tipo de aplicação e do ambiente no qual ele está sendo executado.E. g.na intranet com Domínio do NT, você pode usar NTLM para passar as credenciais do windows diretamente aos servidores na intranet perímetro, sem qualquer necessidade de duplicar sessões.

A abordagem de como fazer isso é geralmente chamado single sign-on (ver Taxas).

Existem várias abordagens para este problema, que é descrito como "Cross-domain Single Sign On".O artigo da wikipédia apontado pelo Matej é particularmente útil se você está procurando uma solução open-source - no entanto - em um ambiente windows, eu acredito que você é melhor fora com uma das 2 abordagens:

  1. Comprar um comercial de SSO produto (como SiteMinder ou PingIdentity)
  2. Usar o MicroSoft domínio cruzado solução de SSO, chamado O ADFS - Active Direcctory Serviços De Federação.(federação é o prazo para coordenar o comportamento de vários domínios)

Eu tenho usado SiteMinder e ele funciona bem, mas é caro.Se você está em um ambiente MicroSoft eu acho que o ADFS é a sua melhor aposta.Iniciar com este O ADFS whitepaper.

Gostaria de usuário algo como CAS:

[1]: http://www.ja-sig.org/products/cas/ CAS

Este é um problema resolvido e não recomendo rolar a sua própria.

Alternativamente, se você quiser construir sua própria e os sites em questão não estão no mesmo servidores ou não ter acesso a um banco de dados compartilhado (no caso, consulte o acima respostas), em seguida, você pode colocar um web beacon em cada um dos sites que referir-se-ia de volta para o site.

Coloque um único pixel da imagem (web beacons) em Um site que chamaria o site B, passando através de um ID de utilizadores (criptografada e hora marcada).Este seria, então, criar uma nova sessão de usuário no site B para o utilizador, o que seria definido como conectado.Em seguida, quando o usuário visitou o site B, eles já teriam de estar registado.

Para minimizar chamadas você pode único lugar em que o web beacon na página inicial ou de registo em páginas de confirmação.Eu usei isso com sucesso no passado para passar informações entre em sites de parceiros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top