CAS - jak zaimplementować single sign-on w swoim serwisie?

65
MAREK STĘPNIOWSKI @mstepniowski

Transcript of CAS - jak zaimplementować single sign-on w swoim serwisie?

Page 1: CAS - jak zaimplementować single sign-on w swoim serwisie?

MAREK STĘPNIOWSKI@mstepniowski

Page 2: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 3: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 4: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 5: CAS - jak zaimplementować single sign-on w swoim serwisie?

SINGLE SIGN-ON

Page 6: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 7: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 8: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 9: CAS - jak zaimplementować single sign-on w swoim serwisie?

Redmine - zarządzanie projektamiredmine.nowoczesnapolska.org.pl

Platforma Redakcyjnaredakcja.wolnelektury.pl

Page 10: CAS - jak zaimplementować single sign-on w swoim serwisie?

Redmine - zarządzanie projektamiredmine.nowoczesnapolska.org.pl

Platforma Redakcyjnaredakcja.wolnelektury.pl

Wolne Lekturywolnelektury.pl

Wolne Podręcznikiwiki.wolnepodreczniki.pl

Blognowoczesnapolska.org.pl

Page 11: CAS - jak zaimplementować single sign-on w swoim serwisie?

•Kerberos

•LDAP

•Active Directory

Page 12: CAS - jak zaimplementować single sign-on w swoim serwisie?

We don’t need nostinkin’ protocols!“

Page 13: CAS - jak zaimplementować single sign-on w swoim serwisie?

•CAS

•OpenID

•OAuth

Page 14: CAS - jak zaimplementować single sign-on w swoim serwisie?

CASJasig

Page 15: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 16: CAS - jak zaimplementować single sign-on w swoim serwisie?

redirect

Page 17: CAS - jak zaimplementować single sign-on w swoim serwisie?

Login: ________ Pass: ________

Page 18: CAS - jak zaimplementować single sign-on w swoim serwisie?

Login: marek Pass: ********

Page 19: CAS - jak zaimplementować single sign-on w swoim serwisie?

redirect(with token)

Page 20: CAS - jak zaimplementować single sign-on w swoim serwisie?

check token

Page 21: CAS - jak zaimplementować single sign-on w swoim serwisie?

yesmarek

no

Page 22: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 23: CAS - jak zaimplementować single sign-on w swoim serwisie?

FEATURES

• Centralized - all passwords are stored in one place

• Subsequent logins can happen without user interaction

• Easy to implement

Page 24: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 25: CAS - jak zaimplementować single sign-on w swoim serwisie?

GATEWAY AUTH

(accessing public webpage)

Page 26: CAS - jak zaimplementować single sign-on w swoim serwisie?

GATEWAY AUTH

redirect

Page 27: CAS - jak zaimplementować single sign-on w swoim serwisie?

GATEWAY AUTH

redirect(with token)

Note We don’t show the login form, even if the user is not logged in

Page 28: CAS - jak zaimplementować single sign-on w swoim serwisie?

GATEWAY AUTH

check token

Page 29: CAS - jak zaimplementować single sign-on w swoim serwisie?

GATEWAY AUTH

yesmarek

no

Page 30: CAS - jak zaimplementować single sign-on w swoim serwisie?

GATEWAY AUTH

If authentication was succesful serve the modified page

Page 31: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 32: CAS - jak zaimplementować single sign-on w swoim serwisie?

JAVASCRIPT AUTH

Page 33: CAS - jak zaimplementować single sign-on w swoim serwisie?

SINGLE SIGN-OFF

Page 34: CAS - jak zaimplementować single sign-on w swoim serwisie?

SINGLE SIGN-OFF

Sign off

Page 35: CAS - jak zaimplementować single sign-on w swoim serwisie?

SINGLE SIGN-OFFBut... It doesn’t scale!

Facebook uses delayed single sign-off:

• First cookie is long lived and keeps the user session

• Second cookie required to perform API calls is short lived and needs to be refreshed using the first cookie

• Signing off from Facebook deletes both cookies

Page 36: CAS - jak zaimplementować single sign-on w swoim serwisie?

CAS 2.0

Page 37: CAS - jak zaimplementować single sign-on w swoim serwisie?

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>marek</cas:user> </cas:authenticationSuccess></cas:serviceResponse>

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationFailure code="INVALID_TICKET"> Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized </cas:authenticationFailure></cas:serviceResponse>

Oh hai, XML!

Page 38: CAS - jak zaimplementować single sign-on w swoim serwisie?

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>marek</cas:user> <cas:proxyGrantingTicket> PGTIOU-84678-8a9d... </cas:proxyGrantingTicket> </cas:authenticationSuccess></cas:serviceResponse>

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationFailure code="INVALID_TICKET"> Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized </cas:authenticationFailure></cas:serviceResponse>

Oh hai, XML!

Page 39: CAS - jak zaimplementować single sign-on w swoim serwisie?

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>marek</cas:user> <cas:proxyGrantingTicket> PGTIOU-84678-8a9d... </cas:proxyGrantingTicket> <fullName>Marek Stępniowski</fullName> <isAdmin>yes<isAdmin> </cas:authenticationSuccess></cas:serviceResponse>

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationFailure code="INVALID_TICKET"> Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized </cas:authenticationFailure></cas:serviceResponse>

Oh hai, XML!

Page 40: CAS - jak zaimplementować single sign-on w swoim serwisie?

CAS 3.0

Page 41: CAS - jak zaimplementować single sign-on w swoim serwisie?

STUCK IN A LIMBOAdds attribute exchange

(most clients implement it as an extension of 2.0)

Page 43: CAS - jak zaimplementować single sign-on w swoim serwisie?

• Django

https://github.com/zuber/django-cas-providerhttps://github.com/zuber/django-cas-consumer

• Python

https://wiki.jasig.org/display/CASC/Pycas

• Ruby

http://code.google.com/p/rubycas-server/http://code.google.com/p/rubycas-client/

+many more

The simplest single sign-on solution available

Page 44: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 45: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 46: CAS - jak zaimplementować single sign-on w swoim serwisie?

OpenID: ________

Page 47: CAS - jak zaimplementować single sign-on w swoim serwisie?

OpenID: stepniowski.com

Page 48: CAS - jak zaimplementować single sign-on w swoim serwisie?

redirect

stepniowski.com

Page 49: CAS - jak zaimplementować single sign-on w swoim serwisie?

Login: ________ Pass: ________

stepniowski.com

Page 50: CAS - jak zaimplementować single sign-on w swoim serwisie?

Login: marek Pass: ********

stepniowski.com

Page 51: CAS - jak zaimplementować single sign-on w swoim serwisie?

redirect(with token)

stepniowski.com

Page 52: CAS - jak zaimplementować single sign-on w swoim serwisie?

check token

stepniowski.com

Page 53: CAS - jak zaimplementować single sign-on w swoim serwisie?

yes|no

stepniowski.com

Page 54: CAS - jak zaimplementować single sign-on w swoim serwisie?

stepniowski.com

Page 55: CAS - jak zaimplementować single sign-on w swoim serwisie?

FEATURES

Strangely similar to CAS

Page 56: CAS - jak zaimplementować single sign-on w swoim serwisie?

FEATURES

• Decentralized - you don’t need to store passwords at all

• Single sign-on but not single sign-in

• Hard to implement - delegation requires an HTML parser

Page 57: CAS - jak zaimplementować single sign-on w swoim serwisie?

openid.sreg

openid.ax

Page 58: CAS - jak zaimplementować single sign-on w swoim serwisie?

2.0

Page 59: CAS - jak zaimplementować single sign-on w swoim serwisie?

• Django

https://github.com/omab/django-social-auth

• Python

https://github.com/openid/python-openid

• Ruby

https://github.com/openid/ruby-openid

+many more

Page 60: CAS - jak zaimplementować single sign-on w swoim serwisie?

COMPARISON

CAS OpenID

• Centralized

• Single sign-on and sign-in

• Easy to implement

• Decentralized

• Only single sign-on

• Hard to implement

• Attribute exchange (CAS 3.0)

• Single sign-off

• Gateway authentication

• openid.sreg and openid.ax

• Single sign-off

• Browser extensions

Page 61: CAS - jak zaimplementować single sign-on w swoim serwisie?
Page 62: CAS - jak zaimplementować single sign-on w swoim serwisie?

ASK FOR ITAnd I will create a separate presentation

Page 63: CAS - jak zaimplementować single sign-on w swoim serwisie?

MAREK STĘPNIOWSKI@mstepniowski

Page 64: CAS - jak zaimplementować single sign-on w swoim serwisie?

http://www.setjam.com/jobs/

WE’RE HIRING!

Page 65: CAS - jak zaimplementować single sign-on w swoim serwisie?

DJANGOPIWOWarsaw SetJam HQ

WednesdayAugust 24th

@mstepniowski@marcink^marcinkaszynski