Bienvenida e introducci贸n

1

Qu茅 aprender谩s sobre autenticaci贸n con OAuth

2

Stack de seguridad para aplicaciones modernas

3

Autenticaci贸n

4

Autorizaci贸n

JSON Web Tokens

5

JSON Web Tokens

6

Autenticaci贸n tradicional vs JWT

7

Configuraci贸n inicial de los proyectos

8

Firmando un JWT

9

Verificando nuestro JWT firmado y buenas practicas con JWT

10

Server-Side vs Client-Side sessions

11

Protegiendo nuestros recursos con JWT

12

Habilitando CORS en nuestro servidor

13

Profundizando el concepto de JWKS

OAuth 2.0

14

C贸mo elegir el flujo adecuado para OAuth 2.0

15

驴Qu茅 es OAuth 2.0?

16

Conociendo el API de Spotify

17

Creando los clientes de Spotify y servicios iniciales

18

Implementando Authorization Code Grant

19

Usando nuestro access token para obtener nuestros recursos

20

Implementando Implicit Grant

21

Implementando nuestro servicio de autenticaci贸n

22

Modificando nuestro Layout

23

Implementando Client Credentials Grant

24

Implementando Resource Owner Password Grant

25

Implementando Authorization Code Grant (PKCE)

Open ID Connect

26

驴Qu茅 es OpenID Connect?

27

Implementando OpenID Connect

Preocupaciones con JWT y OAuth 2.0

28

驴Cu谩les son las preocupaciones con JWT?

29

驴Cu谩les son las preocupaciones con OAuth 2.0?

Haciendo uso de Auth0

30

驴Qu茅 es Auth0?

31

Auth0 Lock y auth0.js

32

Universal Login

33

Social Login con Auth0

34

Custom Social connection con Spotify

35

Multifactor authentication

36

Authorization Extension en Auth0

Consideraciones para producci贸n

37

Buenas pr谩cticas para el despliegue en producci贸n

38

Uso de diferentes tenants para producci贸n con Auth0

Cierre del curso

39

Cierre del curso

Autorizaci贸n

4/39
Recursos

La autorizaci贸n consiste en definir los permisos y limitaciones de los usuarios que han pasado el proceso de autenticaci贸n, recuerda no confundir los t茅rminos. Este proceso de autorizaci贸n sucede, por ejemplo, cuando permitimos que una aplicaci贸n se conecte a nuestra cuenta de Google, muchas veces no queremos que estas aplicaciones tengan todos los permisos de nuestra cuenta (para enviar o leer los correos, por ejemplo), pero si podemos autorizar otros permisos como la c谩mara o el calendario.

Esto mismo sucede con nuestras aplicaciones, por ejemplo, algunos usuarios pueden tener permisos para escribir, actualizar o eliminar cierto contenido, mientras que otros solo pueden visualizar e interactuar con estas publicaciones.

El desaf铆o de esta clase es buscar y describir en la secci贸n de comentarios una o m谩s librer铆as que nos permitan realizar ambos procesos: autenticaci贸n y autorizaci贸n.

Aportes 71

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

馃懏 Autenticaci贸n 馃啔 Autorizaci贸n 馃

El proceso de autenticaci贸n consiste en identificar a los usuarios, qui茅n es, c贸mo se viste, es o no buena gente, etc:

馃槵 User: Hey! Soy Fulano de Casi Creativo y quiero entrar a 鈥
馃懏 Autenticaci贸n: 隆No me digas a d贸nde! Yo solo me encargo de identificarte. 驴Qu茅 m茅todo de autenticaci贸n te gustar铆a utilizar? Nuestra ultima actualizaci贸n nos permite identificarte con mensajes de texto 馃槂
馃槵 User: Ehh, 驴Email y password?
馃懏 Autenticaci贸n: Ok. 馃槖 卢卢
馃槵 User: Email: "[email protected]" y password 鈥渃.ntrasena m.y s.gura123!!".
馃懏 Autenticaci贸n: Credenciales incorrectas, tu correo electr贸nico no esta registrado en nuestra aplicaci贸n, int茅ntalo de nuevo o puede regis鈥
馃槵 User: Email: "[email protected]" y password "c.ntrasena m.y s.gura123!
!鈥.
馃懏 Autenticaci贸n: Bienvenido. Por favor, guarde este token en el localStorage de su navegador y dir铆jase a Mr. Autorizaci贸n que le indicar谩 los lugares a donde tiene acceso, buen viaje 馃槂

Por otra parte, la autorizaci贸n consiste en definir los permisos y limitaciones de los usuarios ya identificados:

馃槵 User: 驴Qu茅 tal brother? Soy Fula鈥
馃 Autorizaci贸n: 馃敟隆Token!馃敟
馃槵 User: Oh claro, el token 馃, bueno en fin, aqu铆 tiene. Vengo para saber a d贸nde 鈥
馃 Autorizaci贸n: Tiene permiso para visualizar su perfil y el de sus amigos pero no puede editar sus datos porque no ha entrado a link de verificaci贸n que le mandamos al correo HACE DOS D脥AS.
馃槵 User: Claro, claro. No se preocupe que apenas llegue a la casa reviso el鈥
馃 Autorizaci贸n: Buen viaje.
馃槵 User: Gracias pero, mi n煤mero de tel茅fono esta mal, 驴no puedo editarlo r谩pido y despues ya lo鈥
馃 Autorizaci贸n: No.
馃槵 User: Pero yo鈥
馃 Autorizaci贸n: No.
馃槵 User: Ok 馃槖.

Ejemplos de plataformas para realizar autenticacion y autorizacion son:

  • Auth0 (Link a la documentacion): Provee una plataforma universal de autenticacion y autorizacion para aplicacion web, moviles y legacy.

    Tiene soporte para aplicacion nativas y moviles (Android, iOS, etc), Single Page Apps (Vue.js, React, Angular), aplicaciones web (en los lenguajes mas populares: Java, Python, Node.js, Go) y para Backend鈥檚 Web/API鈥檚 (Django, Node.js, Go, Python, etc).

  • Okta (Link a la documentacion): Es una plataforma para autenticacion, autorizacion y administracion de usuarios en aplicaciones/API鈥檚 web y moviles.

    Tiene soporte para plataformas moviles (Android, iOS y React Native), lenguajes de Frontend (Javascript, Vue.js, React, Angular) y lenguajes de Backend (Node.js, Java, .NET, Go).

  • Passport.js (Link a la documentacion): Es un middleware de Node.js para autenticacion. Esta dise帽ado para un proposito simple: autenticar los requests que llegan al servidor.

Entiendo entonces que autenticar es la acci贸n o en este caso proceso donde se confirma que efectivamente es la persona y autorizaci贸n son los permisos otorgados y limites establecidos para acciones.

Challenge:
GoogleAuthenticator: Muy 煤til para realizar autenticaci贸n de doble factor.
express-session: Es parte de express para node y permite realizar ambas funiones, autenticar y autorizar.
Passport framework: permite implementar m谩s de 30 estrategias de autenticaci贸n, incluyendo OpenID y OAuth.

Algunas librerias gratis:

  1. Passport JS
  2. Permit
  3. Grant
  4. Feathers
  5. Firebase Authentication

https://www.ma-no.org/es/programacion/javascript/librerias-javascript-gratis-para-la-autenticacion-de-usuarios

En Python encontr茅:
Autenticaci贸n: Authlib
Autorizaci贸n: Requests-OAuthlib

Para Java Spring Security es la librer铆a.

OAuth 2.0 :Librer铆a de autorizaci贸n que le permite a las aplicaciones obtener acceso de una API de modo est谩ndar y simple, para aplicaciones de escritorio, m贸viles y web; proporciona flujos de autorizaci贸n para aplicaciones.

Autenticaci贸n: Librer铆a de autenticaci贸n => JSON Web Tokens (JWT). El formato JSON es agn贸stico del lenguaje!

Spring Security maneja estos dos conceptos, Authentication y Authorization.

  • ++Passport ++ es un middleware de autenticaci贸n compatible con Express para Node.js.
  • Permit permite a帽adir una capa o layer de autenticaci贸n a cualquier API de Node.js.
  • Grant Una biblioteca relativamente nueva y prometedora con m谩s de 180 proveedores compatibles y un playground para Express, Koa y Hapi con OAuth Middleware.
  • ++ Feathers++ framework web de c贸digo abierto para NodeJS que te permite controlar sus datos a trav茅s de recursos RESTful, sockets y plug-ins flexibles en tiempo real.
  • ++ Firebase Authentication++ sistema de gesti贸n de usuarios. Puede guardar algunos datos b谩sicos, ofrecer m煤ltiples m茅todos de acceso (correo electr贸nico/contrase帽a, Google, Facebook鈥).

Para Ruby on Rails:

Autenticaci贸n:

Autorizaci贸n:

Spring Security este Framework utiliza estos dos servicios de Autenticacion y Autorizacion.

yo soy java developer y el mas famoso para nosotros es el spring security ya que el maneja los 2 modos

uno para autentificacion
y otro para autorizaci贸n atreves de roles .

JAAS Java Authentication and Authorization Service, es una interfaz
que permite a las aplicaciones Java acceder a servicios de control de
autenticaci贸n y acceso

En el mundo Java existe spring-security

Hay servicios como Firebase Authetication y de AWS Amazon Cognito

Las librer铆as para NodeJS que encontr茅 son:

  • Autenticaci贸n: passport
  • Authorizaci贸n: node-oauth20-provider
  1. keycloak-js
  2. passport-auth2
  3. passport-local

Autenticaci贸n => 驴Qui茅n Eres?
Autorizaci贸n => 驴Qu茅 puedo hacer?

Passport JS - Firebase Authentication

para node js esta passport js como una libreria de autenticaci贸n

ui-auth : Librer铆a que ofrece helpers para autenticaci贸n y autorizaci贸n v铆a securium-oauth.

https://github.com/codiumsa/ui-auth

Solo autenticacion :

cloudRail :

En python : REQUEST
En java: Spring-security

Me llamo mucho la propuesta de esta blog, que en resumen propone el uso de Blockchain para autenticacion

Java -> Spring Security: Framework para java que proporciona autenticaci贸n, autorizaci贸n.
Node -> Passportjs: Autenticacion middleware para Node

Esto me recuerda mucho a 鈥淓l usuario con el menor privilegio鈥

Reto:
Autenticaci贸n: Firebase Authentication / Permit
Autorizaci贸n: VueJs / Rubyonrails

En Linux tenemos Linux-PAM M贸dulos
de Autentificaci贸n Conectables en un sistema Linux. PAM es un juego de librer铆as compartidas que habilitan al administrador local del sistema para escoger el modo en que los programas autentificar谩n a los usuarios

Autenticaci贸n: Passport JS, Grant, Firebase authentication
Autorizaci贸n: CanCanCan, Pundit.

Authentication: Passport JS, Permit, Feathers authentication management, Firebase Authentication.
Athentication and Autorization: Auth0

Passport JS y Firebase

Autenticaci贸n: Passport JS y Permit

Autorizaci贸n son los tipos de accesos que se le da a un usuario.

En .net hay una 鈥渓ibreria鈥 denominada ASP.NET Identity

Librer铆as de autenticaci贸n y autorizacion :
Passport JS.
Permit.
Grant.
Feathers.
Firebase Authentication.

Challange:

Como ejemplos de librerieas para autenticaci贸n tenemos Passport JS y Firebase Authentication.

Como ejemplo de librer铆as para autorizaci贸n podemos usar Next Auth.

Autenticacion: Es para la identificaci贸n del usuario

Autorizaci贸n: Es para darle acceso o permisos espec铆ficos al usuario

Python:
Autenticaci贸n: requests,authlib
Autorizaci贸n: authomatic, urllib2

Hola鈥 viva OpenId

Para autenticaci贸n PERMIT y para autorizaci贸n 鈥

Passport para javascript
Django internamente tambien lo maneja

Autenticacion: Azure B2C
Autorizacion: Azure B2C con OAuth 2.0

Autenticaci贸n: verifica las identidades, quien entra
Autorizaci贸n: verifica los permisos que corresponden a cada identidad. Que puede hacer

Autorizaci贸n:

  • Oauth 2.0
  • Autorizacion JWT

Authlib: Python Authentication
Auth0 and express for JS

para la autenticaci贸n uso generalmente** laravel-passport**: Es el m贸dulo oficial de Laravel que nos ayuda a la implementaci贸n de servicios de autenticaci贸n haciendo uso del protocolo OAuth2. Adem谩s, otra de las caracter铆sticas de Laravel Passport es la implementaci贸n de JWT como est谩ndar en la generaci贸n de tokens.

y para la autorizacion uso CASL (pronunciado / 藞k忙s蓹l /, como castillo ) es una biblioteca JavaScript de autorizaci贸n isom贸rfica que restringe los recursos a los que se permite acceder a un cliente determinado. Est谩 dise帽ado para ser adoptado gradualmente y puede escalar f谩cilmente entre una autorizaci贸n simple basada en reclamos y una autorizaci贸n basada en atributos y sujetos con todas las funciones. Facilita la administraci贸n y el intercambio de permisos entre los componentes de la interfaz de usuario, los servicios de la API y las consultas de la base de datos.

Challenge:
Passport JS -> La API es simple: se proporciona a Passport una solicitud de autenticaci贸n, y Passport proporciona los hooks/ganchos para controlar lo que ocurre cuando la autenticaci贸n tiene 茅xito o falla.
Permit-> permite autenticarse a trav茅s de los dos esquemas que la mayor铆a de las APIs necesitan: un 煤nico token secreto o un conjunto de credenciales de nombre de usuario y contrase帽a.
Firebase Authentication -> proporcionar a tus usuarios privilegios de lectura/escritura a trav茅s de reglas de seguridad.

Autenticacion, podria utilizarse Passport.js o Permit.
Para autorizacion podria utilizarse CASL o graphql-authorize o Apollo Federation
Aunque siempre podemos recurrir a auth0, aunque sea de pago es interaseante.

5 librerias para la autenticaci贸n de usuarios:
Passport JS
Permit
Grant
Feathers
Firebase Authentication

Microsoft.AspNetCore.Identity,
IdentityServer4

Autenticacion : Passport Js y MSAL para Azure
Autorizacion: AS/400 - IBM i y ASP .NET Identity

autenticacion: PASSPORT JS
en java Spring Security

Autenticaci贸n: Passport JS, Permit, Grant

La autorizaci贸n tanto como en aplicaci贸nes web o en otros medios es importante. Me recuerda cuando se hace pruebas de penetracion a servidores Linux donde de acuerdo a la autorizacion y permisos dados por el administrador podemos hacer escalacion de privilegios!

Encontr茅 devise para auntenticacion en ruby on rails y cancancan para autorizaci贸n

Autorizaci贸n: es la acci贸n de otorgar permisos a un usuario con acceso limitado.

La autenticaci贸n es un tema muy importante, actualimente estoy desarrollando una aplicaci贸n en Flutter y he encontrado librer铆as y paquetes que facilitan este proceso como Dart Auth y como saben Flutter facilita mucho el tema de desarrollo en muchos sentidos.

muy buen modulo

Autenticaci贸n: Firebase Authentication y Feathers
Autorizaci贸n: AS/400 y VueJs

Firebase Authentication: ()

Auth0: Muy costoso!

En el mundo del framework Symfony utilizabamos FosUserBundle para la autenticaci贸n. Para la Autorizaci贸n utilizamos el archivo de seguridad y las anotaciones de las rutas del framework

Autenticaci贸n: Passport Js y Permit
Autorizaci贸n: VueJs y RubyOnRails

Autenticaci贸n: Passport JS / Permit

Passport

En java tenemos:
Para autenticaci贸n -> google-auth-library-java
Para autorizaci贸n -> jcasbin

Alguien sabe que se puede usar con Django para el tema de la Autenticaci贸n y Autorizaci贸n??

Challenge :
馃幆 https://jwt.io/#libraries-io

Frameworks para autenticaci贸n

  1. Passport
  2. Auth0
    Frameworks para autorizaci贸n
  3. Seam
  4. Auth0

Librer铆as para autenticaci贸n:

  • Passport.js

  • Firebase authentication

Librer铆as para autorizaci贸n:

  • Auth0 (aunque sirve para ambos usos)

las dos librer铆as consultadas son PERMIT y Feathers

  1. Passport.js
  2. Firebase Authentication

Excelente!! 馃挭