¿Cuánto sabes sobre la firma y autenticación de interfaces API?
Recientemente, he estado trabajando en el acoplamiento de interfaces de terceros. Teniendo en cuenta la seguridad de la interacción y para evitar que los datos se "desnuden" durante la transmisión, las firmas y la autenticación son esenciales.
2.1. Comenzando con la verificación de inicio de sesión
Esto se usa generalmente en llamadas de interfaz entre nuestros proyectos internos: Inicio de sesión de usuario -> Generar token y guardar -> Interfaz Solicitar un token de verificación. También se puede hacer global para el inicio de sesión único.
2.2. Hablemos del uso de la verificación de token
① Pero si queremos conectarnos a interfaces de terceros o proporcionar interfaces a terceros, este modo se usa con menos frecuencia. En primer lugar, el token que se incluye en la solicitud suele ser una transmisión de texto claro. Si está interesado, puede extraer los datos directamente y hacer otras cosas (aquellos que han hecho rastreadores deben ser muy hábiles).
② Cuando se conecta a interfaces de terceros, el inicio de sesión se realiza principalmente mediante unión o vinculación antes de llamar a la interfaz y, por razones de seguridad, este método tampoco es seguro. necesita mejorarse aún más.
2.3. Solución
De hecho, este problema ya tiene una solución relativamente completa: ambas partes acuerdan una clave pública y una privada y luego siguen un algoritmo específico (MD5, SHA256). ) está cifrado para generar una firma. El usuario lleva la firma y otros datos al llamar a la interfaz. El proveedor también genera una firma de acuerdo con el acuerdo al recibir la llamada. Finalmente, se compararán los datos de las dos partes. La detección de la solicitud se pasará inicialmente. Si no cumple con los requisitos, a veces se niega.
3.1. Idea general
Utilice un algoritmo de firma específico y utilice ambas partes para generarlo (sus parámetros incluyen clave pública, marca de tiempo y parámetros de transporte). Cuando recibo la solicitud, primero verifico si la clave pública existe en nuestro grupo acordado, luego verifico la coherencia de la firma y el tiempo de validez, y finalmente verifico la validez del parámetro. Si ocurre algún problema en alguno de los pasos intermedios, se arrojará la información del recibo correspondiente.
PD: Algunos parámetros pueden participar en el algoritmo de firma
3.2 Algoritmo de firma
Lo más importante aquí es el algoritmo de firma. sigue:
① Utilice Map para recibir parámetros y luego ordene los códigos ACCII de los nombres de parámetros no vacíos de pequeño a grande
② Utilice la forma de pares clave-valor de URL (clave1=valor1&clave2= valor2...) para empalme de cadenas
③ Empalme la clave privada en la cadena generada anteriormente para obtener una nueva cadena signStr y realice la operación SHA256 en signStr para obtener signShsStr
④ Finalmente, convierta signShaStr a mayúsculas para obtener la firma final
4.1, signBuildUtil
4.2, operación SHA256
5.1. incluido en la firma Participar
5.2 El uso de marcas de tiempo y participar en firmas no solo aumenta la dificultad de predecir las firmas, sino que también sirve como base para la detección de la validez del tiempo.
5.3. Lo mejor es tener un buen documento de convenciones y un buen mantenimiento de las claves públicas y privadas.