Herramientas de código abierto Serie 8: Spring Security

Spring Security es un marco de autenticación y autorización que admite modos de autenticación como encabezado de autenticación HTTP BASIC (basado en el estándar basado en IETF RFC), encabezado de autenticación HTTP Digest (estándar basado en IETF RFC), autenticación basada en formularios (para una interfaz de usuario simple), autenticación OpenID, etc. Spring Security permite que el sistema actual integre rápidamente estos mecanismos de autenticación o implemente su propio conjunto de mecanismos de autenticación.

¿Qué es Spring Security?

 

  • Spring Security es un marco de autenticación y autorización que admite modos de autenticación como encabezado de autenticación HTTP BASIC (basado en el estándar basado en IETF RFC), encabezado de autenticación HTTP Digest (estándar basado en IETF RFC), autenticación basada en formularios (para una interfaz de usuario simple), autenticación OpenID, etc. Spring Security permite que el sistema actual integre rápidamente estos mecanismos de autenticación o implemente su propio conjunto de mecanismos de autenticación.
  • Spring Security es un marco de control de acceso y autenticación potente y altamente personalizable. Es el estándar de facto para asegurar aplicaciones basadas en Spring.
  • Spring Security es un marco para aplicaciones Java. Como todos los proyectos de Spring, el verdadero poder de Spring Security es que se puede ampliar fácilmente para satisfacer necesidades personalizadas.

gestión de autoridad

Autenticacion y autorizacion

En Spring Security, la gestión de autoridad incluye principalmente dos aspectos: autenticación y autorización. En términos simples, la autenticación es la autenticación de inicio de sesión del usuario; la autorización es la cantidad de recursos a los que el usuario puede acceder después de iniciar sesión correctamente.

¿Qué es la autenticación y la autorización?

gestión de autoridad

Básicamente, los sistemas que involucran la participación del usuario deben realizar una gestión de autoridad. La gestión de autoridad pertenece a la categoría de seguridad del sistema. La gestión de autoridad realiza el control del acceso de los usuarios al sistema y controla a los usuarios para que accedan y solo accedan a los recursos autorizados de acuerdo con las reglas de seguridad o las políticas de seguridad. La gestión de derechos incluye dos partes: autenticación y autorización de la identidad del usuario, denominadas autenticación y autorización. Para los usuarios de recursos que necesitan control de acceso, primero deben pasar por la autenticación de identidad, y solo después de que se pasa la autenticación, el usuario tiene derechos de acceso al recurso y puede acceder a él.

certificado

La autenticación es el proceso de juzgar si un usuario es un usuario legítimo. El método de autenticación de identidad simple más utilizado es que el sistema verifica el nombre de usuario y la contraseña (contraseña) ingresados ​​por el usuario para ver si es consistente con el nombre de usuario y la contraseña almacenados en el sistema para determinar si la identidad del usuario es correcta. Es como el número de cuenta y la contraseña que necesitamos para iniciar sesión en QQ, WeChat, cuenta de juego, etc.~

autorizado

La autorización, o control de acceso, controla quién puede acceder a qué recursos. Después de la autenticación de identidad, se deben asignar permisos al sujeto para acceder a los recursos del sistema y no se puede acceder a algunos recursos sin permisos. Esto es como el sitio web de una escuela, que tiene recursos a los que los estudiantes pueden acceder, pero los estudiantes no pueden acceder a los recursos de los maestros ~

Estructura general

diseño arquitectónico

En el diseño arquitectónico de Spring Security, la autenticación y la autorización están separadas, pero no importa qué método de autenticación se utilice. Tampoco afectará a la autorización. Son dos existencias independientes. Uno de los beneficios de esta independencia es que es muy conveniente integrar algunas soluciones externas.

1. Certificación

// AuthenticationManager 接口,在Spring Security中认证是由 AuthenticationManager 来负责的,接口定义为:
public interface AuthenticationManager {
    Authentication authenticate(Authentication var1)
        throws AuthenticationException;
}
// Authentication接口,认证以及认证成功的信息主要是由 Authentication 的实现类进行保存的,接口定义如下:
public interface Authentication extends Principal, Serializable {
    Collection<? extends GrantedAuthority> getAuthorities();
    Object getCredentials();
    Object getDetails();
    Object getPrincipal();
    boolean isAuthenticated();
    void setAuthenticated(boolean var1) throws IllegalArgumentException;
}

Introducción al método:

  • getAuthorities Obtener información sobre la autoridad del usuario
  • getCredentials Obtener información de la credencial del usuario, generalmente se refiere a la contraseña
  • getDetails Obtener detalles del usuario
  • getPrincipal Obtenga información de identidad del usuario, nombre de usuario, objeto de usuario, etc.
  • isAuthenticated Si el usuario se autenticó correctamente
// SecurityContextHolder 类,SecurityContextHolder 用来获取登录之后用户信息。定义如下(省略了一些属性和方法):
public class SecurityContextHolder {
    public static void clearContext() {
        strategy.clearContext();
    }
    public static SecurityContext getContext() {
        return strategy.getContext();
    }
    public static int getInitializeCount() {
        return initializeCount;
    }
    public static void setContext(SecurityContext context) {
        strategy.setContext(context);
    }
    public static void setStrategyName(String strategyName) {
        strategyName = strategyName;
        initialize();
    }
    public static SecurityContextHolderStrategy getContextHolderStrategy() {
        return strategy;
    }
    public static SecurityContext createEmptyContext() {
        return strategy.createEmptyContext();
    }
    public String toString() {
        return "SecurityContextHolder[strategy='" + strategyName + "'; initializeCount=" + initializeCount + "]";
    }
}

  • Spring Security guardará los datos de usuario registrados en la sesión. Sin embargo, para facilitar su uso, Spring Security ha realizado algunas mejoras sobre esta base, la más importante de las cuales es el enlace de subprocesos.
  • Cuando el usuario inicia sesión correctamente, Spring Security guardará la información del usuario que inició sesión correctamente en SecurityContextHolder. ThreadLocal implementa el almacenamiento de datos en SecurityContextHolder de forma predeterminada. Solo el subproceso actual puede acceder a las variables creadas con ThreadLocal, y otros subprocesos no pueden acceder ni modificarlas, es decir, los datos del usuario y el subproceso solicitante están vinculados.
  • Cuando se procesa la solicitud de inicio de sesión, Spring Security guardará los datos en SecurityContextHolder en la sesión y borrará los datos en SecurityContextHolder al mismo tiempo. Cada vez que llegue una solicitud en el futuro, Spring Security primero extraerá los datos de inicio de sesión del usuario de la sesión y los guardará en SecurityContextHolder para usarlos en el procesamiento posterior de la solicitud.
  • Esta estrategia es muy conveniente para que los usuarios obtengan los datos del usuario que ha iniciado sesión actualmente en el controlador, la capa de servicio y cualquier código.

Aviso

Nota: Cuando se devuelve la autenticación, significa que la autenticación es exitosa; cuando se devuelve una AuthenticationException, significa que la autenticación ha fallado.

La principal clase de implementación de AuthenticationManager es ProviderManager, y muchas instancias de AuthenticationProvider se administran en ProviderManager. En un proceso de autenticación completo, Spring Security permite múltiples

AuthenticationProvider se usa para implementar varios métodos de autenticación, y ProviderManager administra todos estos AuthenticationProviders.

2. Autorización

En el sistema de autorización de Spring Security, hay dos interfaces clave: AccessDecisionManager y AccessDecisionVoter.

// AccessDecisionManager (访问决策管理器),用来决定此次访问是否被允许。接口定义如下:
public interface AccessDecisionManager {
    void decide(Authentication var1, Object var2, Collection<ConfigAttribute> var3) throws AccessDeniedException, InsufficientAuthenticationException;
    boolean supports(ConfigAttribute var1);
    boolean supports(Class<?> var1);
}
// AccessDecisionVoter (访问决定投票器),投票器会检查⽤户是否具备应有的角色,进而投出赞成、反对或者弃权票。接口定义如下:
public interface AccessDecisionVoter<S> {
    int ACCESS_GRANTED = 1;
    int ACCESS_ABSTAIN = 0;
    int ACCESS_DENIED = -1;
    boolean supports(ConfigAttribute var1);
    boolean supports(Class<?> var1);
    int vote(Authentication var1, S var2, Collection<ConfigAttribute> var3);
}

Aviso

Nota: Cabe señalar que AccessDecisionManager atravesará AccessDecisionVoter uno por uno para decidir si permite el acceso de los usuarios.

// ConfigAttribute,用来保存授权时的角色信息。接口定义如下:
public interface ConfigAttribute extends Serializable {
    String getAttribute();
}

En Spring Security, el rol requerido por el usuario para solicitar un recurso se encapsulará en un objeto ConfigAttribute.

Solo hay un método getAttribute en ConfigAttribute, que devuelve una cadena String, que es el nombre del rol.

En términos generales, los nombres de rol tienen un prefijo ROLE_.Lo que hace el votante AccessDecisionVoter es comparar la relación entre los roles del usuario y el ConfigAtuibut requerido para solicitar un determinado recurso.

uso del proyecto

Seguridad de primavera

De hecho, Spring Security nació muchos años antes de que apareciera Spring Boot.

Sin embargo, el desarrollo de Spring Security no ha sido muy fluido, el principal problema es que el proceso de integración y configuración del framework Spring Security en la aplicación es relativamente complicado.

Pero con el surgimiento de Spring Boot, basado en la solución de configuración automática para Spring Security proporcionada por Spring Boot, los desarrolladores pueden usar Spring Security sin configuración.

Si desea utilizar Spring Security en su aplicación Spring Boot, solo necesita agregar las siguientes dependencias al archivo pom del proyecto Maven:

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
</dependency>

resumen

En resumen, el marco Spring Security, basado en el desarrollo diario, tiene un sistema funcional que cumple completamente con varios requisitos de seguridad.

Diferentes funciones corresponden a diferentes escenarios de aplicación. Varias funciones proporcionadas por el marco Spring Security se pueden utilizar para garantizar la seguridad del sistema en aplicaciones únicas ordinarias, arquitecturas de microservicios y sistemas receptivos.

Información del proyecto

Dirección del proyecto Github:

https://github.com/spring-projects/spring-security

Documentación oficial de Spring Security: https://spring.io/projects/spring-security

Acerca de HummerRisk

HummerRisk es una plataforma de seguridad nativa de la nube de código abierto que resuelve problemas de seguridad y gobernanza nativos de la nube de una manera no intrusiva. Sus capacidades principales incluyen la gobernanza de la seguridad de la nube híbrida y la detección de seguridad de la nube de contenedores K8S.

 

Supongo que te gusta

Origin blog.csdn.net/wolaisongfendi/article/details/131396235
Recomendado
Clasificación