SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
–
–
–
Oauth2 & OpenID Connect
Olivier Rivat
orivat@janua.fr
12 Juillet 2016
Agenda
● Oauth2 concepts
● OpenID connect Concepts
● Oauth2 & OpenID connect with OpenAM
Oauth2
● Oauth2 defini dans la RFC 6749 (
https://tools.ietf.org/rfc/rfc6749.txt)
● Oauth2 est un protocole d'authorisation seulement
(Il ne permet pas l'authentification, permise via
OpenID connect)
● 4 Flux disponibles :
– Authorization Code
– Implicit grant
– Resource Owner Password
– Client Credentials Grant
Oauth2 Concepts
● OAuth2 définit 4 rôles bien distincts :
– Le détenteur des données (Resource Owner) : généralement vous-
même.
– Le serveur de ressources (Resource Server) : serveur qui héberge les
données dont l’accès est protégé (par exemple Google qui stocke les
informations de votre profil).
– Le client (Client Application) : une application demandant des données
au serveur de ressources (cela peut être votre application PHP côté serveur,
une application Javascript côté client ou une application mobile par
exemple).
– Le serveur d’autorisation (Authorization Server) : serveur qui délivre des
tokens (ou jetons) au client.
Oauth2 Concepts
● Tokens
– Le token d’accès (Access Token) : c’est le plus important car c’est lui
qui permet au serveur de ressources d’autoriser la mise à disposition
des données d’un utilisateur.
– Le token de renouvellement (Refresh Token) : ce token est délivré au
même moment que le token d’accès. (Le Refresh token est disponible
qie avec les flux authorization code et ressource owner password
grant)
● Scope
– Le client envoie les scopes qu’ils souhaitent utiliser lors de la demande
d’autorisation.
– Il convient que les scopes demandes soit permis par le serveur
d'autorisation.
Authorization Code Grant
Quelle cinematique utiliser (1) ?
● Authorization Code :
– ll doit être utilisé dès que possible et tout particulièrement quand le client
est un serveur web. Permet d’obtenir un token d’accès de longue durée
qui pourra être renouvelé via un token de renouvellement (si le serveur
d’autorisation le permet).
– Exemple :
● Détenteur des données (Resource Owner) : vous
● Serveur de ressources (Resource Server) : un serveur Google
● Client (Client Application) : un site internet quelconque
● Serveur d’autorisation (Authorization Server) : un serveur Google
Implicit Grant
Quelle cinematique utiliser (2) ?
● Implicit Grant :
– Il doit être utilisé quand l’application se trouve côté client (typiquement
une application Javascript). Il ne permet pas d’obtenir de token de
renouvellement (refresh token)
– Exemple :
● Détenteur des données (Resource Owner) : vous
● Serveur de ressources (Resource Server) : un serveur Facebook
● Client (Client Application) : un site internet utilisant AngularJS par
exemple
● Serveur d’autorisation (Authorization Server) : un serveur Facebook
Resource Owner Password
Credential Grants
Quelle cinematique utiliser (3) ?
● Resouce Owner Password Credentials Grant :
– Avec ce type d’autorisation, les identifiants (et donc le mot de passe) sont
envoyés au client et ensuite au serveur d’autorisation. Il est donc impératif
qu’il y ait une confiance absolue entre ces 2 entités.
– Il est donc principalement utilisé lorsque le client a été développé par la même
autorité que celle fournissant le serveur d’autorisation.
– Exemple :
● Détenteur des données (Resource Owner) : vous ayant un compte sur le
site acme.com de la société Acme
● Serveur de ressources (Resource Server) : la société Acme exposant son
API à api.acme.com
● Client (Client Application) : le site internet acme.com de la société Acme
● Serveur d’autorisation (Authorization Server) : un serveur de la société
Acme
OpenID connect
● OpenID connect est Oauth2 + Authentication :
– OpenID Connect 1.0 est un simple layer d'identite construit au dessus
de oauth2.
– Il permet a des clients de verifier leur identite aupres d'un serveur
d'authorization, et d'obtenir des informations sur l'utilisateur d'une facon
REST-like.
OpenID connect
● Les roles definis dans OpenID connect sont :
– End User (OAuth 2.0 resource owner), dont les informations sont
accedees par l'application.
– Relying Party (RP) (OAuth 2.0 client) qui accede aux donnees
proteges de l'utilisateur.
– OpenID Provider (OP) (OAuth 2.0 authorization server and also
resource server) qui contient les donnees de l'utilisateur, et permet les
acces.
– Dans le cas d'un deploiement OpenID, OpenAM joue ce role d'access.
● De meme, OpenID Connect utilise les 4 flux
presentes pour prcedemment pour Oauth2.
OpenID Connect Concepts (1)
● Une requete OpenID connect est specifie en
utilisant :
– Grant Types for OpenID Connect
– Type of Flow response_type Tokens Returned
– Authorization Code code Authorization code
– Implicit id_token ID token
– Implicit id_token token ID token and access token
● OpenID connect retourne 2 tokens :
– Id_token
– Acces token
OpenID Concepts (2)
● ID Token :
– L'ID token se decompose en 3 parties :
● header
● payload
● Signature
– Le header et la payload sont encodes en base 64, et peuvent etre
faciment lus en decodeant leur format en base 64.
– La signature est un hash des composants suivants: header, payload,
secret.
– Le secret est la signauture du serveur, qui permet de verifier des tokens
et d'en signer des nouveaux.
OpenID Connect Concepts (3)
● Verification d'un ID Token :
– La verification d'un ID token contient environ une dizaine de points dont
certains optionels.
– Est definit dans la spec openID Connect (3.1.3.7. ID Token Validation,
http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken)
– Certains points sont quasiment immediat a verifier (sujet, audience,
validite, expiration …)
– D'autre points sont complexes (verfication de la signature, necessitant
l'usage de libraies JWT pour verifier le token)
● Verification d'un access Token
– De meme, il est possible de valider un access token, en utilisant le
champ at_hash de l'id_token et en calculant un hash a partir de l'access
token.
OpenAM et OpenID Connect
● OpenAM permet de definir un OpenID/Oauth2
provider et de meme client Oauth2
● Interfacage :
– Provider
● Definir un Oauth2/OpenID Server provider (IDP openID) en utilisant
OpenAM
● Definir les scopes necessaires
– Client:
● Enregistrer un Oauth2 Client (mode implicite) aupres de l'IDP
openID connect dans l'openAM (possibel de facon dynamique)
● Recuperer 2 jetons dans la reponse: id_token et access_token
● Validations de l'id_token
OpenID Connect Concepts (2)
● Dans le cas de mode implicite, les 2 tokens sont
renvoyés dans la reponse. Exemple :
● curl -i --cookie "iplanetDirectoryPro=$1" 
http://openam.example.com:18080/openam/oauth2/authorize 
--data "realm=%2f&scope=openid%20profile&
response_type=id_token%20token&
client_id=myClientID&
redirect_uri=http://openam.example.com:18080/openid/cb-implicit.html&
decision=Allow"
● Location: http://openam.example.com:18080/openid/cb-implicit.html#access_token=295768a3-6303-47a0-b31a-
5ab82d4f27be&scope=openid
%20profile&id_token=eyAidHlwIjogIkpXVCIsICJraWQiOiAiU3lsTEM2Tmp0MUtHUWt0RDlNdCswemNlUVNVPSIsICJj
dHkiOiAiSldUIiwgImFsZyI6ICJSUzI1NiIgfQ.eyAiYXRfaGFzaCI6ICJMZUlZbkduR3pDMEx5eUZNWk51S2hBIiwgInN1Yi
I6ICJkZW1vIiwgImlzcyI6ICJodHRwOi8vb3BlbmFtLmV4YW1wbGUuY29tOjE4MDgwL29wZW5hbS9vYXV0aDIiLCAidG
9rZW5OYW1lIjogImlkX3Rva2VuIiwgImF1ZCI6IFsgIm15Q2xpZW50SUQiIF0sICJvcHMiOiAiZDBiNWJiNTItYWM2YS00
NjRlLWJlMDItYTY3MjNmNGViZWQ2IiwgImF6cCI6ICJteUNsaWVudElEIiwgImF1dGhfdGltZSI6IDE0Njc4NDI4MTAsIC
JyZWFsbSI6ICIvIiwgImV4cCI6IDE0Njc4NDM0MTAsICJ0b2tlblR5cGUiOiAiSldUVG9rZW4iLCAiaWF0IjogMTQ2Nzg0M
jgxMCB9.asSMNjQ29gqrXtLCkTigswFOhtAN-e8lfeU-nESmK0P09hA7OLhfpR10L1ta-
f646i0i5728OVAqC7du0EP5Bmm9w1xL__JqMzCFXnHI-jYVGKGKVrGIVtIy9kS2Zj86E4zLTVsiy7egX-
ZKXGZSTpNjD8E6yS51mL28Knwvt44&token_type=Bearer&expires_in=8399
Lecture Access token
● curl http://openam.example.com:18080/openam/oauth2/tokeninfo?
access_token=295768a3-6303-47a0-b31a-5ab82d4f27be | json_pp
{
"openid" : "",
"expires_in" : 8312,
"access_token" : "295768a3-6303-47a0-b31a-5ab82d4f27be",
"token_type" : "Bearer",
"grant_type" : "token",
"profile" : "",
"scope" : [
"openid",
"profile"
],
"realm" : "/"
}
Lecture des champs de l'id_token
(partie 1, header)
● echo -n"eyAidHlwIjogIkpXVCIsICE6yS51mL28Knwvt44....." >
id_token_file.txt
cat id_token_file.txt | cut -d "." -f 1 | base64 -d
{ "typ": "JWT",
"kid": "SylLC6Njt1KGQktD9Mt+0zceQSU=",
"cty": "JWT",
"alg": "RS256"
}
Lecture des champs de l'id_token
(partie 2, payload)
● cat id_token_file.txt | cut -d "." -f 2 | base64 -d
{ "at_hash": "LeIYnGnGzC0LyyFMZNuKhA",
"sub": "demo",
"iss": "http://openam.example.com:18080/openam/oauth2",
"tokenName":
"id_token",
"aud": [ "myClientID" ],
"ops": "d0b5bb52-ac6a-464e-be02-a6723f4ebed6",
"azp": "myClientID",
"auth_time": 1467842810,
"realm": "/",
"exp": 1467843410,
"tokenType": "JWTToken",
"iat": 1467842810
}

Contenu connexe

Tendances

ASFWS 2011 : CAS, OpenID, SAML concepts, différences et exemples
ASFWS 2011 : CAS, OpenID, SAML  concepts, différences et exemplesASFWS 2011 : CAS, OpenID, SAML  concepts, différences et exemples
ASFWS 2011 : CAS, OpenID, SAML concepts, différences et exemplesCyber Security Alliance
 
CAS, OpenID, Shibboleth, SAML : concepts, différences et exemples
CAS, OpenID, Shibboleth, SAML : concepts, différences et exemplesCAS, OpenID, Shibboleth, SAML : concepts, différences et exemples
CAS, OpenID, Shibboleth, SAML : concepts, différences et exemplesClément OUDOT
 
[JDLL 2016] OpenID Connect et FranceConnect
[JDLL 2016] OpenID Connect et FranceConnect[JDLL 2016] OpenID Connect et FranceConnect
[JDLL 2016] OpenID Connect et FranceConnectClément OUDOT
 
Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...
Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...
Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...Philippe Beraud
 
S2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NG
S2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NGS2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NG
S2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NGClément OUDOT
 
ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...
ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...
ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...Cyber Security Alliance
 
Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0Marc-André Tousignant
 
SAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NG
SAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NGSAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NG
SAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NGClément OUDOT
 
Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...
Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...
Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...François Petitit
 
Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016Clément OUDOT
 
LemonLDAP::NG, un WebSSO libre‎ en Perl !
LemonLDAP::NG, un WebSSO libre‎ en Perl !LemonLDAP::NG, un WebSSO libre‎ en Perl !
LemonLDAP::NG, un WebSSO libre‎ en Perl !Clément OUDOT
 
LemonLDAP::NG, un WebSSO libre (ConFoo 2011)
LemonLDAP::NG, un WebSSO libre (ConFoo 2011)LemonLDAP::NG, un WebSSO libre (ConFoo 2011)
LemonLDAP::NG, un WebSSO libre (ConFoo 2011)Clément OUDOT
 
[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...
[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...
[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...Worteks
 
Matinée Pour Comprendre LinID - Mise en place de la fédération des identités...
Matinée Pour Comprendre LinID -  Mise en place de la fédération des identités...Matinée Pour Comprendre LinID -  Mise en place de la fédération des identités...
Matinée Pour Comprendre LinID - Mise en place de la fédération des identités...Clément OUDOT
 
LemonLDAP::NG et le support SAML2
LemonLDAP::NG et le support SAML2LemonLDAP::NG et le support SAML2
LemonLDAP::NG et le support SAML2Clément OUDOT
 

Tendances (20)

ASFWS 2011 : CAS, OpenID, SAML concepts, différences et exemples
ASFWS 2011 : CAS, OpenID, SAML  concepts, différences et exemplesASFWS 2011 : CAS, OpenID, SAML  concepts, différences et exemples
ASFWS 2011 : CAS, OpenID, SAML concepts, différences et exemples
 
CAS, OpenID, Shibboleth, SAML : concepts, différences et exemples
CAS, OpenID, Shibboleth, SAML : concepts, différences et exemplesCAS, OpenID, Shibboleth, SAML : concepts, différences et exemples
CAS, OpenID, Shibboleth, SAML : concepts, différences et exemples
 
Sso fédération
Sso fédérationSso fédération
Sso fédération
 
Presentation OpenID
Presentation OpenIDPresentation OpenID
Presentation OpenID
 
[JDLL 2016] OpenID Connect et FranceConnect
[JDLL 2016] OpenID Connect et FranceConnect[JDLL 2016] OpenID Connect et FranceConnect
[JDLL 2016] OpenID Connect et FranceConnect
 
Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...
Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...
Vous avez dit protocoles Web d'authentification et d'autorisation ! De quoi p...
 
S2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NG
S2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NGS2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NG
S2LQ - Authentification unique sur le Web avec le logiciel libre LemonLDAP::NG
 
LTO Auth
LTO AuthLTO Auth
LTO Auth
 
ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...
ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...
ASFWS 2012 - OAuth : un protocole d’autorisation qui authentifie ? par Maxime...
 
Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0Introduction oauth 2.0 et openid connect 1.0
Introduction oauth 2.0 et openid connect 1.0
 
SAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NG
SAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NGSAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NG
SAML, Open ID et CAS dans un seul WebSSO : LemonLDAP::NG
 
Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...
Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...
Human talks paris - OpenID Connect et FranceConnect - Francois Petitit - 7 ju...
 
La Grande Famille OAuth 2.0
La Grande Famille OAuth 2.0La Grande Famille OAuth 2.0
La Grande Famille OAuth 2.0
 
Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016
 
LemonLDAP::NG, un WebSSO libre‎ en Perl !
LemonLDAP::NG, un WebSSO libre‎ en Perl !LemonLDAP::NG, un WebSSO libre‎ en Perl !
LemonLDAP::NG, un WebSSO libre‎ en Perl !
 
LemonLDAP::NG, un WebSSO libre (ConFoo 2011)
LemonLDAP::NG, un WebSSO libre (ConFoo 2011)LemonLDAP::NG, un WebSSO libre (ConFoo 2011)
LemonLDAP::NG, un WebSSO libre (ConFoo 2011)
 
[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...
[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...
[Open Source Experience 2021] Une infrastructure Cloud et une solution IDaaS ...
 
Matinée Pour Comprendre LinID - Mise en place de la fédération des identités...
Matinée Pour Comprendre LinID -  Mise en place de la fédération des identités...Matinée Pour Comprendre LinID -  Mise en place de la fédération des identités...
Matinée Pour Comprendre LinID - Mise en place de la fédération des identités...
 
Drupal sso
Drupal ssoDrupal sso
Drupal sso
 
LemonLDAP::NG et le support SAML2
LemonLDAP::NG et le support SAML2LemonLDAP::NG et le support SAML2
LemonLDAP::NG et le support SAML2
 

Similaire à Oauth2 & OpenID Connect

Secure a REST API for external public access
Secure a REST API for external public accessSecure a REST API for external public access
Secure a REST API for external public accessThierry Gayet
 
Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...
Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...
Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...Microsoft
 
La gestion des identités pour qui, pourquoi ?
La gestion des identités pour qui, pourquoi ?La gestion des identités pour qui, pourquoi ?
La gestion des identités pour qui, pourquoi ?Benoit Mortier
 
Introduction au web cours.pdf
Introduction au web cours.pdfIntroduction au web cours.pdf
Introduction au web cours.pdfElomyakobi
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)Microsoft Décideurs IT
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)Microsoft Technet France
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthnChristophe Villeneuve
 
Java script Introduction
Java script IntroductionJava script Introduction
Java script IntroductionMohamed MHAMDI
 
LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)Clément OUDOT
 
Mise en place d’un serveur proxy : Cas du CCProxy
Mise en place d’un serveur proxy : Cas du CCProxyMise en place d’un serveur proxy : Cas du CCProxy
Mise en place d’un serveur proxy : Cas du CCProxyJeff Hermann Ela Aba
 
chap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfchap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfdepinfo
 
Les socket ing1_issat
Les socket ing1_issatLes socket ing1_issat
Les socket ing1_issatsloumaallagui
 
08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)Noël
 
chap1-windows server.pptxhhhgggjjjhhdddddh
chap1-windows server.pptxhhhgggjjjhhdddddhchap1-windows server.pptxhhhgggjjjhhdddddh
chap1-windows server.pptxhhhgggjjjhhdddddhHamza546870
 

Similaire à Oauth2 & OpenID Connect (20)

Secure a REST API for external public access
Secure a REST API for external public accessSecure a REST API for external public access
Secure a REST API for external public access
 
Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...
Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...
Vous avez dit protocoles Web d’authentification et d’autorisation ! De quoi p...
 
La gestion des identités pour qui, pourquoi ?
La gestion des identités pour qui, pourquoi ?La gestion des identités pour qui, pourquoi ?
La gestion des identités pour qui, pourquoi ?
 
Introduction au web cours.pdf
Introduction au web cours.pdfIntroduction au web cours.pdf
Introduction au web cours.pdf
 
Openstack framework Iaas
Openstack framework IaasOpenstack framework Iaas
Openstack framework Iaas
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthn
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Cours 8 squid.pdf
Cours 8 squid.pdfCours 8 squid.pdf
Cours 8 squid.pdf
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Java script Introduction
Java script IntroductionJava script Introduction
Java script Introduction
 
LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)
 
Mise en place d’un serveur proxy : Cas du CCProxy
Mise en place d’un serveur proxy : Cas du CCProxyMise en place d’un serveur proxy : Cas du CCProxy
Mise en place d’un serveur proxy : Cas du CCProxy
 
Chapitre 1.pdf
Chapitre 1.pdfChapitre 1.pdf
Chapitre 1.pdf
 
chap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfchap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdf
 
Les socket ing1_issat
Les socket ing1_issatLes socket ing1_issat
Les socket ing1_issat
 
OpenSSO Aquarium Paris
OpenSSO Aquarium ParisOpenSSO Aquarium Paris
OpenSSO Aquarium Paris
 
08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)
 
chap1-windows server.pptxhhhgggjjjhhdddddh
chap1-windows server.pptxhhhgggjjjhhdddddhchap1-windows server.pptxhhhgggjjjhhdddddh
chap1-windows server.pptxhhhgggjjjhhdddddh
 

Plus de Pascal Flamand

Start14 french tech startuffe nation
Start14 french tech startuffe nationStart14 french tech startuffe nation
Start14 french tech startuffe nationPascal Flamand
 
Article "Un an de télétravail et de COVID" dans le magazine Start
Article "Un an de télétravail et de COVID" dans le magazine StartArticle "Un an de télétravail et de COVID" dans le magazine Start
Article "Un an de télétravail et de COVID" dans le magazine StartPascal Flamand
 
Article "La tyrannie du risque zéro" dans le magazine Start
Article "La tyrannie du risque zéro" dans le magazine StartArticle "La tyrannie du risque zéro" dans le magazine Start
Article "La tyrannie du risque zéro" dans le magazine StartPascal Flamand
 
Article "quand les licornes voleront..." dans le magazine Start
Article "quand les licornes voleront..." dans le magazine StartArticle "quand les licornes voleront..." dans le magazine Start
Article "quand les licornes voleront..." dans le magazine StartPascal Flamand
 
Article sur "Le temps des c(e)rises" dans le magazine Start
Article sur "Le temps des c(e)rises" dans le magazine StartArticle sur "Le temps des c(e)rises" dans le magazine Start
Article sur "Le temps des c(e)rises" dans le magazine StartPascal Flamand
 
TOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advancedTOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advancedPascal Flamand
 
TOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO coreTOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO corePascal Flamand
 
Article sur l'Agilité dans le magazine Start
Article sur l'Agilité dans le magazine StartArticle sur l'Agilité dans le magazine Start
Article sur l'Agilité dans le magazine StartPascal Flamand
 
Article sur l'IA dans le magazine Start
Article sur l'IA dans le magazine StartArticle sur l'IA dans le magazine Start
Article sur l'IA dans le magazine StartPascal Flamand
 
Article sur la Smart City dans le magazine Start
Article sur la Smart City dans le magazine StartArticle sur la Smart City dans le magazine Start
Article sur la Smart City dans le magazine StartPascal Flamand
 
TOC training Keycloak RedhatSSO UMA
TOC training Keycloak RedhatSSO UMATOC training Keycloak RedhatSSO UMA
TOC training Keycloak RedhatSSO UMAPascal Flamand
 
Article sur les Startup dans le magazine Start
Article sur les Startup dans le magazine StartArticle sur les Startup dans le magazine Start
Article sur les Startup dans le magazine StartPascal Flamand
 
TOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advancedTOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advancedPascal Flamand
 
TOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO coreTOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO corePascal Flamand
 
Article sur les Pitchs dans le magazine Start
Article sur les Pitchs dans le magazine StartArticle sur les Pitchs dans le magazine Start
Article sur les Pitchs dans le magazine StartPascal Flamand
 
Article sur la Transformation Digitale dans le Magazine Start
Article sur la Transformation Digitale dans le Magazine StartArticle sur la Transformation Digitale dans le Magazine Start
Article sur la Transformation Digitale dans le Magazine StartPascal Flamand
 
Article sur l'IA dans le magazine Start
Article sur l'IA dans le magazine StartArticle sur l'IA dans le magazine Start
Article sur l'IA dans le magazine StartPascal Flamand
 
Tribune paca jaguards 12.12.18
Tribune paca jaguards 12.12.18Tribune paca jaguards 12.12.18
Tribune paca jaguards 12.12.18Pascal Flamand
 
Partenariat Jaguards - Busit
Partenariat Jaguards - BusitPartenariat Jaguards - Busit
Partenariat Jaguards - BusitPascal Flamand
 

Plus de Pascal Flamand (20)

Start14 french tech startuffe nation
Start14 french tech startuffe nationStart14 french tech startuffe nation
Start14 french tech startuffe nation
 
Article "Un an de télétravail et de COVID" dans le magazine Start
Article "Un an de télétravail et de COVID" dans le magazine StartArticle "Un an de télétravail et de COVID" dans le magazine Start
Article "Un an de télétravail et de COVID" dans le magazine Start
 
Article "La tyrannie du risque zéro" dans le magazine Start
Article "La tyrannie du risque zéro" dans le magazine StartArticle "La tyrannie du risque zéro" dans le magazine Start
Article "La tyrannie du risque zéro" dans le magazine Start
 
Article "quand les licornes voleront..." dans le magazine Start
Article "quand les licornes voleront..." dans le magazine StartArticle "quand les licornes voleront..." dans le magazine Start
Article "quand les licornes voleront..." dans le magazine Start
 
Article sur "Le temps des c(e)rises" dans le magazine Start
Article sur "Le temps des c(e)rises" dans le magazine StartArticle sur "Le temps des c(e)rises" dans le magazine Start
Article sur "Le temps des c(e)rises" dans le magazine Start
 
TOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advancedTOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advanced
 
TOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO coreTOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO core
 
Article sur l'Agilité dans le magazine Start
Article sur l'Agilité dans le magazine StartArticle sur l'Agilité dans le magazine Start
Article sur l'Agilité dans le magazine Start
 
Article sur l'IA dans le magazine Start
Article sur l'IA dans le magazine StartArticle sur l'IA dans le magazine Start
Article sur l'IA dans le magazine Start
 
Article sur la Smart City dans le magazine Start
Article sur la Smart City dans le magazine StartArticle sur la Smart City dans le magazine Start
Article sur la Smart City dans le magazine Start
 
TOC training Keycloak RedhatSSO UMA
TOC training Keycloak RedhatSSO UMATOC training Keycloak RedhatSSO UMA
TOC training Keycloak RedhatSSO UMA
 
Article sur les Startup dans le magazine Start
Article sur les Startup dans le magazine StartArticle sur les Startup dans le magazine Start
Article sur les Startup dans le magazine Start
 
TOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advancedTOC training Keycloak RedhatSSO advanced
TOC training Keycloak RedhatSSO advanced
 
TOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO coreTOC training KeyCloak Redhat SSO core
TOC training KeyCloak Redhat SSO core
 
TOC training OpenIDM
TOC training OpenIDMTOC training OpenIDM
TOC training OpenIDM
 
Article sur les Pitchs dans le magazine Start
Article sur les Pitchs dans le magazine StartArticle sur les Pitchs dans le magazine Start
Article sur les Pitchs dans le magazine Start
 
Article sur la Transformation Digitale dans le Magazine Start
Article sur la Transformation Digitale dans le Magazine StartArticle sur la Transformation Digitale dans le Magazine Start
Article sur la Transformation Digitale dans le Magazine Start
 
Article sur l'IA dans le magazine Start
Article sur l'IA dans le magazine StartArticle sur l'IA dans le magazine Start
Article sur l'IA dans le magazine Start
 
Tribune paca jaguards 12.12.18
Tribune paca jaguards 12.12.18Tribune paca jaguards 12.12.18
Tribune paca jaguards 12.12.18
 
Partenariat Jaguards - Busit
Partenariat Jaguards - BusitPartenariat Jaguards - Busit
Partenariat Jaguards - Busit
 

Oauth2 & OpenID Connect

  • 1. – – – Oauth2 & OpenID Connect Olivier Rivat orivat@janua.fr 12 Juillet 2016
  • 2. Agenda ● Oauth2 concepts ● OpenID connect Concepts ● Oauth2 & OpenID connect with OpenAM
  • 3. Oauth2 ● Oauth2 defini dans la RFC 6749 ( https://tools.ietf.org/rfc/rfc6749.txt) ● Oauth2 est un protocole d'authorisation seulement (Il ne permet pas l'authentification, permise via OpenID connect) ● 4 Flux disponibles : – Authorization Code – Implicit grant – Resource Owner Password – Client Credentials Grant
  • 4. Oauth2 Concepts ● OAuth2 définit 4 rôles bien distincts : – Le détenteur des données (Resource Owner) : généralement vous- même. – Le serveur de ressources (Resource Server) : serveur qui héberge les données dont l’accès est protégé (par exemple Google qui stocke les informations de votre profil). – Le client (Client Application) : une application demandant des données au serveur de ressources (cela peut être votre application PHP côté serveur, une application Javascript côté client ou une application mobile par exemple). – Le serveur d’autorisation (Authorization Server) : serveur qui délivre des tokens (ou jetons) au client.
  • 5. Oauth2 Concepts ● Tokens – Le token d’accès (Access Token) : c’est le plus important car c’est lui qui permet au serveur de ressources d’autoriser la mise à disposition des données d’un utilisateur. – Le token de renouvellement (Refresh Token) : ce token est délivré au même moment que le token d’accès. (Le Refresh token est disponible qie avec les flux authorization code et ressource owner password grant) ● Scope – Le client envoie les scopes qu’ils souhaitent utiliser lors de la demande d’autorisation. – Il convient que les scopes demandes soit permis par le serveur d'autorisation.
  • 7. Quelle cinematique utiliser (1) ? ● Authorization Code : – ll doit être utilisé dès que possible et tout particulièrement quand le client est un serveur web. Permet d’obtenir un token d’accès de longue durée qui pourra être renouvelé via un token de renouvellement (si le serveur d’autorisation le permet). – Exemple : ● Détenteur des données (Resource Owner) : vous ● Serveur de ressources (Resource Server) : un serveur Google ● Client (Client Application) : un site internet quelconque ● Serveur d’autorisation (Authorization Server) : un serveur Google
  • 9. Quelle cinematique utiliser (2) ? ● Implicit Grant : – Il doit être utilisé quand l’application se trouve côté client (typiquement une application Javascript). Il ne permet pas d’obtenir de token de renouvellement (refresh token) – Exemple : ● Détenteur des données (Resource Owner) : vous ● Serveur de ressources (Resource Server) : un serveur Facebook ● Client (Client Application) : un site internet utilisant AngularJS par exemple ● Serveur d’autorisation (Authorization Server) : un serveur Facebook
  • 11. Quelle cinematique utiliser (3) ? ● Resouce Owner Password Credentials Grant : – Avec ce type d’autorisation, les identifiants (et donc le mot de passe) sont envoyés au client et ensuite au serveur d’autorisation. Il est donc impératif qu’il y ait une confiance absolue entre ces 2 entités. – Il est donc principalement utilisé lorsque le client a été développé par la même autorité que celle fournissant le serveur d’autorisation. – Exemple : ● Détenteur des données (Resource Owner) : vous ayant un compte sur le site acme.com de la société Acme ● Serveur de ressources (Resource Server) : la société Acme exposant son API à api.acme.com ● Client (Client Application) : le site internet acme.com de la société Acme ● Serveur d’autorisation (Authorization Server) : un serveur de la société Acme
  • 12. OpenID connect ● OpenID connect est Oauth2 + Authentication : – OpenID Connect 1.0 est un simple layer d'identite construit au dessus de oauth2. – Il permet a des clients de verifier leur identite aupres d'un serveur d'authorization, et d'obtenir des informations sur l'utilisateur d'une facon REST-like.
  • 13. OpenID connect ● Les roles definis dans OpenID connect sont : – End User (OAuth 2.0 resource owner), dont les informations sont accedees par l'application. – Relying Party (RP) (OAuth 2.0 client) qui accede aux donnees proteges de l'utilisateur. – OpenID Provider (OP) (OAuth 2.0 authorization server and also resource server) qui contient les donnees de l'utilisateur, et permet les acces. – Dans le cas d'un deploiement OpenID, OpenAM joue ce role d'access. ● De meme, OpenID Connect utilise les 4 flux presentes pour prcedemment pour Oauth2.
  • 14. OpenID Connect Concepts (1) ● Une requete OpenID connect est specifie en utilisant : – Grant Types for OpenID Connect – Type of Flow response_type Tokens Returned – Authorization Code code Authorization code – Implicit id_token ID token – Implicit id_token token ID token and access token ● OpenID connect retourne 2 tokens : – Id_token – Acces token
  • 15. OpenID Concepts (2) ● ID Token : – L'ID token se decompose en 3 parties : ● header ● payload ● Signature – Le header et la payload sont encodes en base 64, et peuvent etre faciment lus en decodeant leur format en base 64. – La signature est un hash des composants suivants: header, payload, secret. – Le secret est la signauture du serveur, qui permet de verifier des tokens et d'en signer des nouveaux.
  • 16. OpenID Connect Concepts (3) ● Verification d'un ID Token : – La verification d'un ID token contient environ une dizaine de points dont certains optionels. – Est definit dans la spec openID Connect (3.1.3.7. ID Token Validation, http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken) – Certains points sont quasiment immediat a verifier (sujet, audience, validite, expiration …) – D'autre points sont complexes (verfication de la signature, necessitant l'usage de libraies JWT pour verifier le token) ● Verification d'un access Token – De meme, il est possible de valider un access token, en utilisant le champ at_hash de l'id_token et en calculant un hash a partir de l'access token.
  • 17. OpenAM et OpenID Connect ● OpenAM permet de definir un OpenID/Oauth2 provider et de meme client Oauth2 ● Interfacage : – Provider ● Definir un Oauth2/OpenID Server provider (IDP openID) en utilisant OpenAM ● Definir les scopes necessaires – Client: ● Enregistrer un Oauth2 Client (mode implicite) aupres de l'IDP openID connect dans l'openAM (possibel de facon dynamique) ● Recuperer 2 jetons dans la reponse: id_token et access_token ● Validations de l'id_token
  • 18. OpenID Connect Concepts (2) ● Dans le cas de mode implicite, les 2 tokens sont renvoyés dans la reponse. Exemple : ● curl -i --cookie "iplanetDirectoryPro=$1" http://openam.example.com:18080/openam/oauth2/authorize --data "realm=%2f&scope=openid%20profile& response_type=id_token%20token& client_id=myClientID& redirect_uri=http://openam.example.com:18080/openid/cb-implicit.html& decision=Allow" ● Location: http://openam.example.com:18080/openid/cb-implicit.html#access_token=295768a3-6303-47a0-b31a- 5ab82d4f27be&scope=openid %20profile&id_token=eyAidHlwIjogIkpXVCIsICJraWQiOiAiU3lsTEM2Tmp0MUtHUWt0RDlNdCswemNlUVNVPSIsICJj dHkiOiAiSldUIiwgImFsZyI6ICJSUzI1NiIgfQ.eyAiYXRfaGFzaCI6ICJMZUlZbkduR3pDMEx5eUZNWk51S2hBIiwgInN1Yi I6ICJkZW1vIiwgImlzcyI6ICJodHRwOi8vb3BlbmFtLmV4YW1wbGUuY29tOjE4MDgwL29wZW5hbS9vYXV0aDIiLCAidG 9rZW5OYW1lIjogImlkX3Rva2VuIiwgImF1ZCI6IFsgIm15Q2xpZW50SUQiIF0sICJvcHMiOiAiZDBiNWJiNTItYWM2YS00 NjRlLWJlMDItYTY3MjNmNGViZWQ2IiwgImF6cCI6ICJteUNsaWVudElEIiwgImF1dGhfdGltZSI6IDE0Njc4NDI4MTAsIC JyZWFsbSI6ICIvIiwgImV4cCI6IDE0Njc4NDM0MTAsICJ0b2tlblR5cGUiOiAiSldUVG9rZW4iLCAiaWF0IjogMTQ2Nzg0M jgxMCB9.asSMNjQ29gqrXtLCkTigswFOhtAN-e8lfeU-nESmK0P09hA7OLhfpR10L1ta- f646i0i5728OVAqC7du0EP5Bmm9w1xL__JqMzCFXnHI-jYVGKGKVrGIVtIy9kS2Zj86E4zLTVsiy7egX- ZKXGZSTpNjD8E6yS51mL28Knwvt44&token_type=Bearer&expires_in=8399
  • 19. Lecture Access token ● curl http://openam.example.com:18080/openam/oauth2/tokeninfo? access_token=295768a3-6303-47a0-b31a-5ab82d4f27be | json_pp { "openid" : "", "expires_in" : 8312, "access_token" : "295768a3-6303-47a0-b31a-5ab82d4f27be", "token_type" : "Bearer", "grant_type" : "token", "profile" : "", "scope" : [ "openid", "profile" ], "realm" : "/" }
  • 20. Lecture des champs de l'id_token (partie 1, header) ● echo -n"eyAidHlwIjogIkpXVCIsICE6yS51mL28Knwvt44....." > id_token_file.txt cat id_token_file.txt | cut -d "." -f 1 | base64 -d { "typ": "JWT", "kid": "SylLC6Njt1KGQktD9Mt+0zceQSU=", "cty": "JWT", "alg": "RS256" }
  • 21. Lecture des champs de l'id_token (partie 2, payload) ● cat id_token_file.txt | cut -d "." -f 2 | base64 -d { "at_hash": "LeIYnGnGzC0LyyFMZNuKhA", "sub": "demo", "iss": "http://openam.example.com:18080/openam/oauth2", "tokenName": "id_token", "aud": [ "myClientID" ], "ops": "d0b5bb52-ac6a-464e-be02-a6723f4ebed6", "azp": "myClientID", "auth_time": 1467842810, "realm": "/", "exp": 1467843410, "tokenType": "JWTToken", "iat": 1467842810 }