scala oauth-2.0 spray akka-http

scala - ¿Cuál es la mejor forma de realizar la autenticación OAuth2 utilizando akka-http?



oauth-2.0 spray (1)

Creo que el mayor problema es que OAuth2 en sí no te dice cómo se ven los detalles de implementación.

Para citar el RFC :

El token puede denotar un identificador utilizado para recuperar la información de autorización o puede contener la información de autorización de una manera verificable (es decir, una cadena de token que consta de algunos datos y una firma). Se pueden requerir credenciales de autenticación adicionales, que están más allá del alcance de esta especificación, para que el cliente pueda usar un token.

Los tokens de acceso pueden tener diferentes formatos, estructuras y métodos de utilización (por ejemplo, propiedades criptográficas) en función de los requisitos de seguridad del servidor de recursos. Los atributos token de acceso y los métodos utilizados para acceder a recursos protegidos están fuera del alcance de esta especificación y están definidos por especificaciones complementarias como [RFC6750].

Por ejemplo, puede usar JWT para validar una solicitud o puede usar el token solo como un identificador y preguntarle a un servicio si el token está permitido para ese recurso.

Dependiendo de su proveedor OAuth2, la implementación puede variar, por lo que supongo que el framework solo puede proporcionarle lo común (extraer el token) o implementar todas las implementaciones posibles de OAuth2, lo que parece no ser factible en este momento.

Personalmente, he usado pauldijou / jwt-scala en el pasado, que es posible que desee echar un vistazo.

Akka HTTP y Spray proporcionan una directiva authenticateOAuth2 , pero su documentación establece que

Esta directiva no implementa el protocolo OAuth2 completo, sino que permite implementarlo extrayendo el token necesario de los encabezados HTTP.

Tampoco puedo encontrar ninguna biblioteca que implemente OAuth2 para Akka HTTP o Spray. ¿Hay algo que me falta, o es simplemente el estado de estas bibliotecas en este momento?