Estoy desarrollando un sistema que usa el ahorro. Me gustaría que se compruebe la identidad de los clientes y que las operaciones sean ACL. ¿Thrift proporciona algún soporte para eso?¿Cómo manejar la autenticación y autorización con ahorro?
Respuesta
No directamente. La única forma de hacerlo es tener un método de autenticación que cree una clave (temporal) en el servidor, y luego cambie todos sus métodos para que el primer argumento sea esta clave y que todos ellos generen un error no autenticado. Por ejemplo:
exception NotAuthorisedException {
1: string errorMessage,
}
exception AuthTimeoutException {
1: string errorMessage,
}
service MyAuthService {
string authenticate(1:string user, 2:string pass)
throws (1:NotAuthorisedException e),
string mymethod(1:string authstring, 2:string otherargs, ...)
throws (1:AuthTimeoutException e, ...),
}
Utilizamos este método y salvar nuestras claves para una instancia de memcached asegurada con un tiempo de espera de 30 minutos para las claves para mantener todo "ágil". Se espera que los clientes que reciben un AuthTimeoutException
reautoricen y vuelvan a intentar, y tenemos algunas reglas de firewall para detener los ataques de fuerza bruta.
Las tareas como la autorización y los permisos no se consideran parte de Thrift, principalmente porque estas cosas están (generalmente) más relacionadas con la lógica de la aplicación que con un concepto general de RPC/serialización. Lo único que Thrift admite de inmediato es el TSASLTransport
. No puedo decir mucho sobre eso yo mismo, simplemente porque nunca sentí la necesidad de usarlo.
La otra opción podría ser hacer uso de THeaderTransport
que lamentablemente en el momento de la escritura solo se implementa con C++. Por lo tanto, si planea usarlo con algún otro idioma, es posible que deba invertir algún trabajo adicional. Huelga decir que aceptamos contribuciones ...
Un poco tarde (supongo que es muy tarde) pero modifiqué el código fuente Thrift para esto hace un par de años.
Acabo de enviar un ticket con el parche al https://issues.apache.org/jira/browse/THRIFT-4221 por esto.
Eche un vistazo a eso. Básicamente, la propuesta es agregar un enlace "BeforeAction" que hace exactamente eso.
Ejemplo Golang genera diff
+ // Called before any other action is called
+ BeforeAction(serviceName string, actionName string, args map[string]interface{}) (err error)
+ // Called if an action returned an error
+ ProcessError(err error) error
}
type MyServiceClient struct {
@@ -391,7 +395,12 @@ func (p *myServiceProcessorMyMethod) Process(seqId int32, iprot, oprot thrift.TP
result := MyServiceMyMethodResult{}
var retval string
var err2 error
- if retval, err2 = p.handler.MyMethod(args.AuthString, args.OtherArgs_); err2 != nil {
+ err2 = p.handler.BeforeAction("MyService", "MyMethod", map[string]interface{}{"AuthString": args.AuthString, "OtherArgs_": args.OtherArgs_})
+ if err2 == nil {
+ retval, err2 = p.handler.MyMethod(args.AuthString, args.OtherArgs_)
+ }
+ if err2 != nil {
+ err2 = p.handler.ProcessError(err2)
- 1. Estrategias para manejar la autenticación y autorización de usuario multiplataforma
- 2. Autenticación y autorización JSF
- 3. JAX-WS, Autenticación y autorización - ¿Cómo?
- 4. ¿Cómo debo manejar la autenticación con Nancy?
- 5. autenticación REST/autorización
- 6. ASP.NET MVC4 Seguridad, Autenticación y Autorización
- 7. Solución de autenticación y autorización para Padrino
- 8. jax-rs rest webservice autenticación y autorización
- 9. ¿Cómo debo manejar la Autorización/Autenticación en mi aplicación Asp.net MVC?
- 10. Spring 3.0 Security - Autorización con autenticación
- 11. JSF: Autenticación y autorización, la mejor forma de hacerlo
- 12. spring-security: autorización sin autenticación
- 13. ¿Cómo se implementaría la autenticación y la autorización con RavenDb en una aplicación MVC?
- 14. Ayuda con la solución de autenticación/autorización de MVC
- 15. ¿Cómo manejar la autenticación HTTP usando HttpURLConnection?
- 16. Cómo manejar la Autenticación básica en WebView
- 17. HTTP Spec: cabeceras Autorización proxy y autorización
- 18. autenticación y autorización para Restfull API (java jersery)
- 19. RabbitMQ y autorización
- 20. TastyPie - Override_urls hace caso omiso de autenticación y autorización
- 21. Arquitectura para Autenticación/Autorización de usuarios móviles y web
- 22. Autenticación y autorización de Google entre sus aplicaciones
- 23. LDAP para autenticación y autorización en Playframework 2.0
- 24. Autenticación centralizada y autorización para varios servicios web
- 25. Autenticación/Autorización de ASP.NET MVC 3
- 26. ASP.NET Web API Questions - Autorización/Autenticación
- 27. ¿Es una buena práctica manejar los errores de Autenticación/Autorización usando excepciones?
- 28. ¿Cómo hago la autorización básica de Rails con RestClient?
- 29. OpenID + OAuth para la aplicación Webapp y Desktop/Mobile Autenticación y Autorización
- 30. esquemas de autenticación múltiples para la cabecera HTTP 'autorización'
Está enviando las contraseñas en texto claro sobre el alambre? – JensG
@JensG No, le gustaría enviar la contraseña en un formato encriptado y verificar esa cadena codificada del lado del servidor. Bcrypt es bueno para esto, ya que la cadena enviada a través del cable puede no coincidir exactamente con la cadena almacenada, pero cuando se comprueba con el algoritmo bcrypt todavía puede validar. –
Si este es el caso, no enviaría contraseñas de texto claro, pero si un atacante puede leer la contraseña hash, podría reproducir la llamada de autenticación y obtener acceso a sus servicios. – cjungel