Red de conocimiento informático - Conocimiento sistemático - Acerca de la implementación del inicio de sesión único (SSO) que todos pueden entender (código fuente adjunto)

Acerca de la implementación del inicio de sesión único (SSO) que todos pueden entender (código fuente adjunto)

El concepto básico del inicio de sesión único

El nombre completo en inglés de SSO es Single Sign On. SSO significa que en múltiples sistemas de aplicaciones, los usuarios solo necesitan iniciar sesión una vez para acceder a todos los sistemas de aplicaciones confiables. Incluye un mecanismo para asignar este inicio de sesión principal a otras aplicaciones iniciadas por el mismo usuario. Es una de las soluciones de integración empresarial empresarial más populares en la actualidad. (Este párrafo proviene de la Enciclopedia Baidu)

Hoy, este artículo presentará un método de implementación de inicio de sesión único. El código es súper simple, solo se usa para verificar si mi idea es factible. ¡Por favor completa los detalles!

Inicio de sesión único para nombres de dominio de segundo nivel

¿Qué es un nombre de dominio de segundo nivel? Por ejemplo:

Sitio 1.dominio.com

sitio2.dominio.com

Para el inicio de sesión único del nombre de dominio de segundo nivel, podemos disfrútalo a través de * * * Las cookies se implementan fácilmente. En pocas palabras, al configurar una factura de formulario, establezca el dominio de la cookie en el nombre de dominio de nivel superior, por ejemplo:

cookie http = nueva cookie http (FormsAuthCookieName, ticket cifrado);

Cookie. Caduca = ¿recordarme? expirationDate: Fecha y hora. ValorMínimo

Cookies. HttpOnly = true

Cookies. ruta="/";

Cookies. Domain = " domain.com

Context.response.cookies.set(cookie);

Este método no implica dominio cruzado. Cuando el atributo de dominio de la cookie está configurado en el nombre de dominio de nivel superior, todos los nombres de dominio de segundo nivel pueden acceder a la cookie autenticada. Siempre que esta cookie esté verificada, la identidad se puede verificar en el lado del servidor.

Sin embargo, cuando se trata de dominios cruzados. , por ejemplo:

Sitio web 1.com

site2.com

No puede disfrutar de las cookies en este momento, por lo que la solución anterior no es válida. Entonces, ¿cómo? ¿Cómo implementar el inicio de sesión único entre dominios? Continúe leyendo

Inicio de sesión único entre dominios

Con respecto a la idea de diseño de SSO entre dominios, dibujé un. Diagrama de flujo simple:

En primer lugar, el SSO entre dominios se divide en dos partes: SSO-Servidor y SSO-Cliente. Puede haber varios

Clientes SSO únicos. servidor de inicio de sesión

El servidor SSO es el principal responsable del inicio de sesión del usuario, asignar la toma al cliente SSO y verificar la toma.

El inicio de sesión y el cierre de sesión utilizan la autenticación del formulario. descrito en detalle en muchos lugares

El servidor SSO asigna tokens

En la parte de asignar tokens al cliente SSO, cuando el cliente SSO solicita la página confiable de SSO, verifique si el servidor SSO está conectado. Si no ha iniciado sesión, salte a la página de inicio de sesión del servidor SSO. Si está conectado, ejecute el código para asignar Token. Después de la asignación, agregue TokenID como parámetro para returnUrl. El código es el siguiente:

If (domain.security.smart authenticate.log in user!=null)

p>

{

//Generar token y token persistente.

Dominio.SSO.Entity.SSOToken token = nueva entidad.

Token usuario = nueva entidad SSO();

Token. nombre de usuario = dominio.

seguridad. autenticación inteligente. usuario de inicio de sesión. nombre de usuario;

Token. ID de inicio de sesión = Sesión. Campo ID de sesión

. SSO. entidad. Token de SSO. Lista de tokens de SSO. add(token);

//La URL devuelta por el empalme tiene Token en el parámetro.

divisor de cadena = returnUrl. Contiene ('?') ?" amp: "?";

returnUrl = returnUrl splitter " token = " token.ID;

response.redirect(returnUrl);

p>

}

Una vez completada la asignación del token, la página saltará a la página del Cliente SSO con el parámetro TokenID y agregará el valor del token a la cookie del Cliente SSO. En una solicitud posterior, SSO-Client verifica la validez del token llamando al servicio SSO-Server

SSO-server verifica el token

Verifiqué el token a través de WebService.

Primero, defina un servicio web en SSO-Server:

[Método de red]

SSOToken ValidateToken(String tokenID)

p>

{

if (!KeepToken(tokenID))

return null

var token = Lista de tokens de dominio find(m = gt; m . ID). == ID del token);

Token de devolución

}

[Método de red]

public bool KeepToken(String tokenID)

{

var token = Dominio SSO . Lista de tokens de SSO find(m = gt; m. ID == ID del token);

if (token == null)

devuelve falso

if (token.IsTimeOut())

Devuelve falso

Token .

Devuelve verdadero

Se usa ValidateToken. Verifica la validez del TokenID. KeepToken se usa para evitar que el token caduque.

SSO-Client verifica el. token llamando a Validate y obtiene la información del usuario actualmente conectado. A continuación, veamos la implementación de SSO-Client.

Cliente de inicio de sesión único

SSO-Client existe como. un sistema confiable. No tiene su propio sistema de autenticación y solo puede completar la autenticación del usuario a través del servidor SSO.

Cuando un usuario solicita un recurso protegido de SSO-Client, SSO-Client primero verificará si hay un TokenID. Si hay un TokenID, llamará al servicio web del SSO-Server para verificar si. el TokenID es legal.

Después de una verificación exitosa, se devolverá una instancia de SSOToken, que contiene la información del usuario que inició sesión.

El código específico es el siguiente:

If (! String. IsNullOrEmpty(tokenID))

{

AuthTokenService. Cliente AuthTokenServiceSoapClient = nuevo AuthTokenService. AuthTokenServiceSoapClient();

var token = cliente. validar token(token id);

If (token!=null)

{

This.lblMessage.Text = "Inicio de sesión exitoso, usuario registrado: "

Ficha. usuario. Nombre de usuario

" lt;a href='/logout.aspx?returnUrl= "

Servidor. UrlEncode(" ")

"′ gt; export

}

Otro

{

Respuesta. Redirect("/sso.aspx? returnUrl="

Server. UrlEncode("/default . aspx ");

}

}

Otro

{

Redirect("/sso.aspx?returnUrl="

Server.UrlEncode("/default . aspx ");

}

Código fuente

Este artículo presenta mis ideas específicas y algunas implementaciones. Si todavía está interesado, puede descargar mi código gt Single. inicio de sesión (abreviatura de inicio de sesión único)

Implementación del código fuente:

1. Cree dos sitios en IIS y vincúlelos al servidor SSO y al cliente SSO, respectivamente. los nombres de dominio son sso-server.com y sso-client.com respectivamente.

2. Agregue dos líneas de mapeo al archivo de hosts, sso-server.com y sso-client.com. 127.0.0.1 para garantizar la accesibilidad.

3. Visite sso-client.com. La página saltará a la página de inicio de sesión de sso-server.com e ingresará su nombre de usuario y contraseña, luego haga clic en Iniciar sesión <. /p>