Autenticação de Formulários subdomínios
-
03-07-2019 - |
Pergunta
É possível autenticar os usuários subdomínios quando a autenticação ocorre em um sub-domínio em vez do domínio pai?
Por exemplo:
usuário fizer logon no site1.parent.com, e então temos de enviá-los para reporting.parent.com.
Posso autenticar-los para o site de relatórios, embora o log-in ocorreu em um sub-domínio?
Até agora, todas as pesquisas que tenho feito tem registro de usuários no domínio pai em primeiro lugar e, em seguida, cada sub-domínio tem acesso ao cookie de autenticação.
Solução
Você pode definir o cookie para ser o domínio pai em tempo de autenticação, mas você tem que configurá-lo explicitamente, ele será o padrão para o domínio completo que você está.
Uma vez que o cookie de autenticação está configurado corretamente para o domínio pai, em seguida, todos os sub-domínios deve ser capaz de lê-lo.
Outras dicas
Quando você autenticar o usuário, defina o domínio do cookie de autenticação para o domínio de segundo nível, ou seja, parent.com. Cada sub-domínio irá receber cookies do domínio pai, a pedido, de modo a autenticação sobre cada é possível desde que você terá um cookie de autenticação compartilhada de trabalhar.
código de autenticação:
System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False);
authcookie.Domain = "parent.com";
HttpResponse.AppendCookie(authcookie);
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName,
False));
Como uma nota lateral, eu achei que depois de usar o método de JRO que funcionou bem +1, o FormsAuthenication.SignOut () método não funcionar quando chamado a partir de um subdomínio diferente do www /. (Eu estou supondo porque a propriedade .Domain não corresponder) - Para contornar esta situação eu usei:
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
myCookie.Domain = "parent.com";
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
Além de definir um cookie para domínio pai também precisa ter certeza de que todos os sites (apps) tem mesmo validationKey e decryptionKey () para que todos reconhecem permissão de autenticação do outro e cookie. Muito bom artigo aqui http://www.codeproject.com/KB/aspnet/SingleSignon.aspx
Sim, com certeza. Você pode precisar rolar o seu próprio em algumas fases, mas deve ser factível.
Uma idéia:. Como você redirecioná-los através da fronteira, dar-lhes um tempo de passagem de token e, em seguida, dizer ao sub-domínio de recebimento esperar que eles (este utilizador, a partir deste IP, com este token)
A resposta de Jro funciona bem. Mas certifique-se de atualizar a autenticação setting "domain"
formas webconfig
, Caso contrário forma signout autenticação não funcionará corretamente. Aqui é a questão signout Vim através. Truque aqui é ter um '' como o prefixo como o domínio está definido para o cookie como ".parent.com" (use um inspector cookie).
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/>
</authentication>
2 coisas a serem feitas:
- MachineKey deve ser o mesmo em todos web.config (domínio principal do domínio e sub (s))
- nome do domínio AuthenticationCookie deve ser o mesmo.
Siga o seguinte artigo para obter mais profundidade.