SlideShare a Scribd company logo
Identity Management with Spring Security




         Dave Syer, VMware, SpringOne 2011
Overview

●
    What is Identity Management?
●
    Is it anything to do with Security?
●
    Some existing and emerging standards
●
    Relevant features of Spring Security and other Spring projects
●
    Common use cases
●
    Demo of prototype IDM system




                         COPYRIGHT VMWARE, INC, 2011
Agenda


●   Core domain:
     ● Authentication, identity, trust, delegation, claim, authorization
●   SSO
●   Identity Management
●   Standards:
     ● SAML
     ● OpenID
     ● OAuth, OAuth2
     ● OpenID Connect
     ● SCIM
     ● JWT
●   Spring Security and other projects
●   Use cases (Google, Facebook, CloudFoundry) and demos
●   IDM as a Service
                             COPYRIGHT VMWARE, INC, 2011
Demo Code




 $ git clone git://gist.github.com/1316904.git




                 COPYRIGHT VMWARE, INC, 2011
Authentication


●   You say you are Fred Bloggs? Can you prove it?
●   Human-human interactions
     ● Official document (passport, driving licence, etc.)
     ● We actually call it “ID”
     ● Letter of introduction
     ● Word of mouth, friend of a friend
●   Machine-human interactions
     ● Something you know, hopefully unguessable, maybe random, e.g.
       username/password
     ● Something you have, e.g. one Time Password (OTP) from RSA
       hard/soft token
     ● Multifactor authentication
●   Machine-machine interactions



                         COPYRIGHT VMWARE, INC, 2011
Typical System Architecture

                                                 “I'm Fred,
                                                 show me my
                                                 photos”
                                                              User
                   APP




         DB      User details
                 store




                         COPYRIGHT VMWARE, INC, 2011
Fred Accesses his Photos




                     COPYRIGHT VMWARE, INC, 2011
Two Apps, No Shared Authentication

                                              “I'm Fred,
                                              show me my
                                              photos”
                                                                  User
                 APP1


                                                              “I'm Fred,
                                                              can I buy a
                                                              book?”



                                                           APP2



         DB     User details
                store

                                                    DB


                      COPYRIGHT VMWARE, INC, 2011
Two Apps, Shared User Details

                                               “I'm Fred,
                                               show me my
                                               photos”
                                                                   User
                  APP1


                                                               “I'm Fred,
                                                               can I buy a
                                                               book?”



                                                            APP2



         DB

               User details
               store

                       COPYRIGHT VMWARE, INC, 2011
Two Apps, Single Sign On

                                               “I'm Fred,
                                               show me my
                                               photos”
                                                                   User
                  APP1


                                                               “I'm Fred,
                                                               can I buy a
                                                               book?”



                                                            APP2
                                      SSO

         DB

               User details
               store

                       COPYRIGHT VMWARE, INC, 2011
All Apps are
Single Sign On: Example Flow                           the same




                                                   ●   Explicit authentication
                                                       required on first visit

                                                   ●   Avoidable
                                                       subsequently if App
                                                       can store token – but
                                                       then with multiple
                                                       apps you have
                                                       distributed state



                                                        This is
                                                        unavoidable
                     COPYRIGHT VMWARE, INC, 2011
Two Apps, Single Sign On with Separate Authentication

                                                “I'm Fred,
                                                show me my
                                                photos”
                                                                    User
                   APP1


                                                                “I'm Fred,
                                                                can I buy a
                                                                book?”
         AUTH


                                                             APP2
                                       SSO

         DB

                User details
                store

                        COPYRIGHT VMWARE, INC, 2011
SSO With Spring Security


●   Good support for CAS
●   Many custom implementations for commercial products like
    SiteMinder
●   Field is fragmented
●   OpenID...




                        COPYRIGHT VMWARE, INC, 2011
Trust


●   You say you are Fred Bloggs? Can you prove it?
●   Oh, I remember, Martha said you're alright. Come in...
●   I trust Martha, USDOT, UKPA, etc, to verify Fred's identity
●   Why?
●   Because I know them, and they say they know Fred.




                          COPYRIGHT VMWARE, INC, 2011
Consumer Trusts Provider

                                                     “I'm Fred,
                                                     show me my
                                                     photos”
                                                                      User
   Consumer,           APP
   Relying Party




                                             IDP           Provider

           DB

                   User details
                   store

                             COPYRIGHT VMWARE, INC, 2011
Simplified User-App-IDP Interaction




                      COPYRIGHT VMWARE, INC, 2011
So What did we Gain with an Identity Provider?


●   App no longer has to do authentication or keep record of secure
    information about users
●   User only has to type secrets into a known trusted site (e.g.
    Google)

●   Separation of concerns
●   Abstraction always comes at a cost
●   Increased complexity – more to understand, more to maintain,
    more to go wrong
●   Complexity and Security are uneasy bedfellows
●   Hence there are standards that cover this interaction




                         COPYRIGHT VMWARE, INC, 2011
Complexity: Schematic Actual Conversation




                     COPYRIGHT VMWARE, INC, 2011
Complexity: HTTP Protocol Actual Conversation




                     COPYRIGHT VMWARE, INC, 2011
Compare: Native Authentication




                     COPYRIGHT VMWARE, INC, 2011
OpenID

                                                    “I'm Fred,
                                                    show me my
                                                    photos”
                                                                     User
  Relying Party       APP




                                         OpenID           Provider

          DB

                  User details
                  store

                            COPYRIGHT VMWARE, INC, 2011
OpenID


●   Protocol for attribute exchange
●   Sits on top of HTTP(S)
●   Form plus JSONish on back channel (attribute fetch)
●   Form data and redirects on front channel
●   Does not specify authentication (up to the Provider)
●   Does not require pre-registration of Relying Parties (Apps)
●   Implemented in various languages, e.g. Java->OpenID4J (Google
    code)
●   Support in Spring Security for Relying Party




                        COPYRIGHT VMWARE, INC, 2011
Spring Security OpenID RP



<http xmlns="http://www.springframework.org/schema/security">
    ...

   <openid-login login-page="/openid"
         user-service-ref="registeringUserService"
         authentication-failure-url="/login_error.jsp">
       <attribute-exchange identifier-match=".*">
           <openid-attribute name="email"
              Type="http://schema.openid.net/contact/email" required="true" />
           <openid-attribute name="fullname"
              type="http://schema.openid.net/namePerson" required="true" />
       </attribute-exchange>
   </openid-login>

</http>




                            COPYRIGHT VMWARE, INC, 2011
SSO with OpenID

                                                   “I'm Fred,
                                                   show me my
                                                   photos”
                                                                           User
   Relying Party      APP1


                                                                       “I'm Fred,
                                                                       can I buy a
                                                                       book?”



                                                                    APP2
                                        OpenID

           DB
                                                         Provider
                   User details
                   store

                           COPYRIGHT VMWARE, INC, 2011
SSO with OpenID




                                                No user input
                                                required here if
                                                IDP is stateful




                  COPYRIGHT VMWARE, INC, 2011
Delegation and Client Authorization


●   So Fred told you to come and pick up his order?
●   You say you're Martha? Show me some ID.
●   And what about some documentation about the order?




           Resource Owner

                                       Client
                                       (e.g. a service
                                       provider)          Scope of
                                                          responsibility




                            COPYRIGHT VMWARE, INC, 2011
Delegation and Client Authorization


●   An App needs to access Fred's resources on his behalf
●   Resources live in a protected Resource Server (API)
●   Fred is the Resource Owner: he can read and write his resources
    if he logs into the API himself
●   But App is the Client of the API service not Fred, and Fred
    doesn't want to grant App write access
●   Resource Server can grant App access to a restricted Scope of
    activity
●   Fred authorizes the App to read his Resources
●   App gets an Access Token that enables it to act on behalf of Fred
●   Where does it get the token from? An Authorization Server




                          COPYRIGHT VMWARE, INC, 2011
Delegation

                                                     “I'm Fred,
                                                     show me my
                                                     photos”               Resource
       Client          APP                                                 Owner


         Token


        API           Resource
                      Server


                Token                                      Authorization
                                           AUTH
                Services                                   Server




                             COPYRIGHT VMWARE, INC, 2011
Example Token Services using Shared Storage

                                                  “I'm Fred,
                                                  show me my
                                                  photos”               Resource
       Client       APP                                                 Owner


         Token


        API        Resource
                   Server


                                        AUTH            Authorization
                                                        Server
         DB

                 Token Store


                          COPYRIGHT VMWARE, INC, 2011
Delegation Standards

●   SAML 1.0, 2.0
     ● XML
     ● back channel                                       Need key
                                                          exchange
     ● cryptography
     ● Spring Security SAML, Service Provider = Resource Server only
●   OAuth 1.0a
     ● plain text
     ● back channel
                                                     Nonce and request token
     ● cryptography
     ● Spring Security OAuth (consumer and provider)
●   OAuth 2
     ● JSON (plus optional custom formats)
     ● no back channel in spec (but need token services in practice)
     ● clear text (need SSL), plus extensions
     ● Spring Security OAuth (consumer and provider)

                            COPYRIGHT VMWARE, INC, 2011
OAuth2


●   Client /app

      GET /api/photos
      Authorization: Bearer FDSHGK78JH356G

●   Resource Server /api
       authenticated:
      200 OK
      ...


       unauthenticated:

      401 Unauthorized
      WWW-Authenticate: Bearer realm=”/auth”




                           COPYRIGHT VMWARE, INC, 2011
OAuth2 Acquiring an Access Token


●   Grant Types
     ● Password
     ● Authorization Code
     ● Refresh Token
     ● Implicit
     ● Client Credentials
●   Others allowed as extensions, e.g. SAML assertion




                         COPYRIGHT VMWARE, INC, 2011
OAuth2 Grant Type: Password


●   Resource Server /api

      GET /auth/token?response_type=password&username=......&...
      Authorization: Basic asdsdfggghf=

●   Authorization Server /auth                           Client
                                                         credentials
     ● Token Endpoint

      200 OK
      {
        “access_token” : “JAHDGFJH78IOUY”,
        “token_type” : “bearer”,
        “expires_in” : “3600”
      }




                           COPYRIGHT VMWARE, INC, 2011
OAuth2: Grant Type Password




                    COPYRIGHT VMWARE, INC, 2011
OAuth2 Grant Type: Authorization Code


●    Client /app

    GET /auth/authorize?response_type=authorization_code&...
    Authorization: Basic asdsdfggghf=

●    Authorization Server /auth
      ● Authorization Endpoint

        302 Found
        Location: /app/photos?code=dfjhg




                             COPYRIGHT VMWARE, INC, 2011
OAuth2 Grant Type: Authorization Code


●   Resource Server /api

      GET /auth/token?grant_type=authorization_code&code=......&...
      Authorization: Basic asdsdfggghf=

●   Authorization Server /auth
     ● Token Endpoint

      200 OK
      {
        “access_token” : “JAHDGFJH78IOUY”,
        “token_type” : “bearer”,
        “expires_in” : “3600”
      }




                           COPYRIGHT VMWARE, INC, 2011
OAuth2 Grant Type: Authorization Code




                                                   ????




                     COPYRIGHT VMWARE, INC, 2011
OAuth2 Grant Type: Authorization Code, Explicit Authorization

         The spec doesn't say how this happens, just that it does,
         e.g:
       ????




                       COPYRIGHT VMWARE, INC, 2011
OAuth2: More Detail and Options

●   Grant type
     ● Password – native apps, fixed authentication
     ● Authorization Code – webapps with browser redirects
     ● Refresh Token – optional for tokens issued with Auth Code
     ● Implicit – script clients in webapps, native apps
     ● Client Credentials – service peers
     ● Other, e.g. SAML
●   Token type
     ● Bearer
     ● Other, e.g. MAC
●   Scope
     ● Arbitrary string. Signifies something to Resource Server about which
       resources are available. C.f. “audience” in SAML.
●   State



                             COPYRIGHT VMWARE, INC, 2011
Spring Security OAuth: Resource Server /api




    <sec:http ...>
        ...
        <sec:custom-filter ref="oauth2ServiceFilter"
            before="EXCEPTION_TRANSLATION_FILTER" />
    </sec:http>

    <oauth:provider id="oauth2ServiceFilter" token-services-ref="tokenServices">
        <oauth:resource-server resource-id="api" />
    </oauth:provider>




                            COPYRIGHT VMWARE, INC, 2011
Spring Security OAuth: Authorization Server /auth



<sec:http>
  ...
    <sec:custom-filter ref="oauth2ServiceFilter" after="EXCEPTION_TRANSLATION_FILTER" />
</sec:http>

<oauth:provider id="oauth2ServiceFilter" token-services-ref="tokenServices">
    <oauth:authorization-server client-details-service-ref="clientDetails">
        <oauth:authorization-code />
        <oauth:implicit />
        <oauth:refresh-token />
        <oauth:client-credentials />
        <oauth:password />
    </oauth:authorization-server>
</oauth:provider>

<oauth:client-details-service id="clientDetails">
    <oauth:client clientId="app"
        authorizedGrantTypes="password,authorization_code,refresh_token"
        scope="read_photos"
        authorities="ROLE_GUEST" />
</oauth:client-details-service>




                                COPYRIGHT VMWARE, INC, 2011
Spring Security OAuth: Client /app



 <sec:http>
   ...
     <sec:custom-filter ref="oauth2ClientFilter"     after="EXCEPTION_TRANSLATION_FILTER"/>
 </sec:http>

 <oauth:client id="oauth2ClientFilter" token-services-ref="oauth2TokenServices" />

 <bean class="apiRestTemplate" class="org...oauth2.client.OAuth2RestTemplate">
     <constructor-arg ref="api" />
 </bean>

 <oauth:resource id="api" type="authorization_code"
     clientId="app" accessTokenUri="${accessTokenUri}"
     userAuthorizationUri="${userAuthorizationUri}" scope="read_photos" />




   N.B. Spring Social has client support as well (similar approach,
   convergence will come later)


                                COPYRIGHT VMWARE, INC, 2011
OpenID Connect

●   Similar to OpenID in the role that it plays, but not in any other way
    related
●   Uses OAuth2 as a protocol for attribute exchange
●   Google, Salesforce, etc. behind spec
●   OAuth2 endpoints:
     ●  /authorize
     ●  /token
●   OpenID endpoints are OAuth2 protected resources:
     ●  /userinfo
     ●  /check_id
●   Clients obtain access token with scope=openid
●   OAuth /token endpoint includes id token in response as well as
    access token
●   Responses in JSON or JWT (=encrypted JSON)
●   Not implemented in Spring project (yet), SECOAUTH or SEC

                            COPYRIGHT VMWARE, INC, 2011
OpenID Connect: Token Acquisition


●   Resource Server /api

      GET /auth/token?grant_type=authorization_code&code=......&...
      Authorization: Basic asdsdfggghf=

●   Authorization Server /auth
     ● Token Endpoint

      200 OK
      {
        “access_token” : “JAHDGFJH78IOUY”,
        “token_type” : “bearer”,
        “expires_in” : “3600”,
        “scope” : “openid”,
        “id_token” : “LKJADSFKHJG8723E”
      }



                           COPYRIGHT VMWARE, INC, 2011
OpenID Connect: User Info


●   Resource Server /api

      GET /auth/userinfo
      Authorization: Bearer JAHDGFJH78IOUY

●   Authorization Server /auth
     ● User Info Endpoint

      200 OK
      {
        “user_id” : “dsyer”,
        “name” : “Dave Syer”,
        “email” : “dsyer@vmware.com”,
        ...
      }



                           COPYRIGHT VMWARE, INC, 2011
SCIM


●   Simple Cloud Identity Management
●   Plain test / JSON standard for provisioning identity systems
●   Standard endpoints
     ●  /Users – query user accounts
     ●  /User – CRUD operations on users
     ●  /Groups – CRUD operations on groups
●   An OAuth2 authorization service might implement SCIM
●   Not implemented (yet) in Spring




                          COPYRIGHT VMWARE, INC, 2011
Spring Security: Project Organization

         Luke Taylor (VMW),
                                                              Core
         Robert Winch         Spring Security
                                                                          Web
                                           ● 3.1.0 just released
                                           ● Stable, mature

 Ryan Heaton,                                                       LDAP      OpenID       ...
 Dave Syer (VMW),


      Spring Security OAuth
                                                         Spring Extensions: Security

                                                                    Vladimir Schaefer,
                                Keith Donald (VMW),                 Mike Wiesner (VMW)
   OAuth1a          OAuth2      Craig Walls (VMW)
                                                                 SAML        Kerberos
                                       Spring Social
  ● Oauth2 spec not yet final
  ● External lead
                                                                ● 1.0.0 not yet released
                                   ● 1.0.0 just released        ● Partly external, low-activity
  ● 1.0.0.M5 release in pipeline
                                   ● Consumer for well-

                                     known providers


                                COPYRIGHT VMWARE, INC, 2011
CloudFoundry IDM

                                                     “I'm Fred,
                                                     show me my
                                                     apps”                   Resource
        Client      Admin Console                                            Owner


            Token


  CloudController       Resource
                        Server

                                                           Authorization
 Access          Token                                     Server:
                                            UAA
 Decision        Services
                                                           OAuth2,
                                                           OpenID Connect,
   Collab Spaces                                           SCIM



                             COPYRIGHT VMWARE, INC, 2011
CloudFoundry IDM

                                                     “I'm Fred,
                                                     show me my
                                                     apps”                   Resource
        Client         VMC                                                   Owner


            Token


  CloudController      Resource
                       Server

                                                           Authorization
 Access          Token                                     Server:
                                            UAA
 Decision        Services
                                                           OAuth2,
                                                           OpenID Connect,
   Collab Spaces                                           SCIM



                             COPYRIGHT VMWARE, INC, 2011
Links


●   SECOAUTH:
    https://github.com/SpringSource/spring-security-oauth
●   OpenId4J: http://code.google.com/p/openid4java/
●   OpenID Connect: http://openid.net/developers/specs/
●   OAuth2: http://tools.ietf.org/html/draft-ietf-oauth-v2
●   SCIM: http://www.simplecloud.info
●   SES (SAML and Kerberos):
    http://static.springsource.org/spring-security/site/extensions.html
●   Demos: http://gist.github.com/1316904




                          COPYRIGHT VMWARE, INC, 2011
Overview

●
    What is Identity Management?
●
    Is it anything to do with Security?
●
    Some existing and emerging standards
●
    Relevant features of Spring Security and other Spring projects
●
    Common use cases
●
    Demo of prototype IDM system




                         COPYRIGHT VMWARE, INC, 2011

More Related Content

PDF
IT エンジニアのための 流し読み Windows 10 - Windows Hello for Business
PDF
認証の課題とID連携の実装 〜ハンズオン〜
PDF
俺が考えた最強のID連携デザインパターン
PPTX
Building secure applications with keycloak
PPTX
Technical Considerations for Deploying FIDO Authentication
PDF
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
PDF
脆弱性スキャナVuls(入門編)
PPTX
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 2
IT エンジニアのための 流し読み Windows 10 - Windows Hello for Business
認証の課題とID連携の実装 〜ハンズオン〜
俺が考えた最強のID連携デザインパターン
Building secure applications with keycloak
Technical Considerations for Deploying FIDO Authentication
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
脆弱性スキャナVuls(入門編)
Azure AD B2C Webinar Series: Identity Protocols OIDC and OAuth2 part 2

What's hot (20)

PDF
20190723 AWS Black Belt Online Seminar AWS CloudHSM
PDF
なぜOpenID Connectが必要となったのか、その歴史的背景
PDF
AWS CLIでAssumeRole
PPTX
Enterprise Security in Hybrid Cloud ISACA-SV 2012
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
PDF
IDaaS を正しく活用するための認証基盤設計
PDF
Open Match Deep Dive
PDF
IoT におけるセキュリティ
PDF
OAuth & OpenID Connect Deep Dive
PDF
Study HashiCorp Products - Terraform 実行環境の決定版、Terraform Cloudの機能全部見せます_.pdf
PPTX
Intro to OAuth2 and OpenID Connect
PDF
開発者のためのActive Directory講座
PPTX
API Security Fundamentals
PPTX
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
PPTX
クラウド利用者として考えるサステナビリティ
PDF
API Security Best Practices & Guidelines
PPTX
インターネットメールアドレス変更時の注意点について
PPTX
Token-based uthentication
PPT
OAuth 2.0 and OpenId Connect
PDF
Breaking vaults: Stealing Lastpass protected secrets
20190723 AWS Black Belt Online Seminar AWS CloudHSM
なぜOpenID Connectが必要となったのか、その歴史的背景
AWS CLIでAssumeRole
Enterprise Security in Hybrid Cloud ISACA-SV 2012
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
IDaaS を正しく活用するための認証基盤設計
Open Match Deep Dive
IoT におけるセキュリティ
OAuth & OpenID Connect Deep Dive
Study HashiCorp Products - Terraform 実行環境の決定版、Terraform Cloudの機能全部見せます_.pdf
Intro to OAuth2 and OpenID Connect
開発者のためのActive Directory講座
API Security Fundamentals
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
クラウド利用者として考えるサステナビリティ
API Security Best Practices & Guidelines
インターネットメールアドレス変更時の注意点について
Token-based uthentication
OAuth 2.0 and OpenId Connect
Breaking vaults: Stealing Lastpass protected secrets
Ad

More from JAX London (20)

PDF
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
ODP
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
PDF
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
PDF
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
PDF
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
PDF
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
PDF
Spring Day | Spring and Scala | Eberhard Wolff
PDF
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
PPT
Keynote | The Rise and Fall and Rise of Java | James Governor
ODP
Java Tech & Tools | OSGi Best Practices | Emily Jiang
PPTX
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
PDF
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
PDF
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
PDF
Java Tech & Tools | Just Keep Passing the Message | Russel Winder
PDF
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
PDF
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
ODP
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
PDF
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
KEY
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
PDF
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Keynote | The Rise and Fall and Rise of Java | James Governor
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
Java Tech & Tools | Just Keep Passing the Message | Russel Winder
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Ad

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
1. Introduction to Computer Programming.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
cloud_computing_Infrastucture_as_cloud_p
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
A Presentation on Artificial Intelligence
PDF
Machine learning based COVID-19 study performance prediction
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
August Patch Tuesday
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Encapsulation theory and applications.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
1. Introduction to Computer Programming.pptx
MIND Revenue Release Quarter 2 2025 Press Release
cloud_computing_Infrastucture_as_cloud_p
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Digital-Transformation-Roadmap-for-Companies.pptx
Encapsulation_ Review paper, used for researhc scholars
A comparative analysis of optical character recognition models for extracting...
A Presentation on Artificial Intelligence
Machine learning based COVID-19 study performance prediction
SOPHOS-XG Firewall Administrator PPT.pptx
Empathic Computing: Creating Shared Understanding
August Patch Tuesday
OMC Textile Division Presentation 2021.pptx
Assigned Numbers - 2025 - Bluetooth® Document
Encapsulation theory and applications.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf

Spring Day | Identity Management with Spring Security | Dave Syer

  • 1. Identity Management with Spring Security Dave Syer, VMware, SpringOne 2011
  • 2. Overview ● What is Identity Management? ● Is it anything to do with Security? ● Some existing and emerging standards ● Relevant features of Spring Security and other Spring projects ● Common use cases ● Demo of prototype IDM system COPYRIGHT VMWARE, INC, 2011
  • 3. Agenda ● Core domain: ● Authentication, identity, trust, delegation, claim, authorization ● SSO ● Identity Management ● Standards: ● SAML ● OpenID ● OAuth, OAuth2 ● OpenID Connect ● SCIM ● JWT ● Spring Security and other projects ● Use cases (Google, Facebook, CloudFoundry) and demos ● IDM as a Service COPYRIGHT VMWARE, INC, 2011
  • 4. Demo Code $ git clone git://gist.github.com/1316904.git COPYRIGHT VMWARE, INC, 2011
  • 5. Authentication ● You say you are Fred Bloggs? Can you prove it? ● Human-human interactions ● Official document (passport, driving licence, etc.) ● We actually call it “ID” ● Letter of introduction ● Word of mouth, friend of a friend ● Machine-human interactions ● Something you know, hopefully unguessable, maybe random, e.g. username/password ● Something you have, e.g. one Time Password (OTP) from RSA hard/soft token ● Multifactor authentication ● Machine-machine interactions COPYRIGHT VMWARE, INC, 2011
  • 6. Typical System Architecture “I'm Fred, show me my photos” User APP DB User details store COPYRIGHT VMWARE, INC, 2011
  • 7. Fred Accesses his Photos COPYRIGHT VMWARE, INC, 2011
  • 8. Two Apps, No Shared Authentication “I'm Fred, show me my photos” User APP1 “I'm Fred, can I buy a book?” APP2 DB User details store DB COPYRIGHT VMWARE, INC, 2011
  • 9. Two Apps, Shared User Details “I'm Fred, show me my photos” User APP1 “I'm Fred, can I buy a book?” APP2 DB User details store COPYRIGHT VMWARE, INC, 2011
  • 10. Two Apps, Single Sign On “I'm Fred, show me my photos” User APP1 “I'm Fred, can I buy a book?” APP2 SSO DB User details store COPYRIGHT VMWARE, INC, 2011
  • 11. All Apps are Single Sign On: Example Flow the same ● Explicit authentication required on first visit ● Avoidable subsequently if App can store token – but then with multiple apps you have distributed state This is unavoidable COPYRIGHT VMWARE, INC, 2011
  • 12. Two Apps, Single Sign On with Separate Authentication “I'm Fred, show me my photos” User APP1 “I'm Fred, can I buy a book?” AUTH APP2 SSO DB User details store COPYRIGHT VMWARE, INC, 2011
  • 13. SSO With Spring Security ● Good support for CAS ● Many custom implementations for commercial products like SiteMinder ● Field is fragmented ● OpenID... COPYRIGHT VMWARE, INC, 2011
  • 14. Trust ● You say you are Fred Bloggs? Can you prove it? ● Oh, I remember, Martha said you're alright. Come in... ● I trust Martha, USDOT, UKPA, etc, to verify Fred's identity ● Why? ● Because I know them, and they say they know Fred. COPYRIGHT VMWARE, INC, 2011
  • 15. Consumer Trusts Provider “I'm Fred, show me my photos” User Consumer, APP Relying Party IDP Provider DB User details store COPYRIGHT VMWARE, INC, 2011
  • 16. Simplified User-App-IDP Interaction COPYRIGHT VMWARE, INC, 2011
  • 17. So What did we Gain with an Identity Provider? ● App no longer has to do authentication or keep record of secure information about users ● User only has to type secrets into a known trusted site (e.g. Google) ● Separation of concerns ● Abstraction always comes at a cost ● Increased complexity – more to understand, more to maintain, more to go wrong ● Complexity and Security are uneasy bedfellows ● Hence there are standards that cover this interaction COPYRIGHT VMWARE, INC, 2011
  • 18. Complexity: Schematic Actual Conversation COPYRIGHT VMWARE, INC, 2011
  • 19. Complexity: HTTP Protocol Actual Conversation COPYRIGHT VMWARE, INC, 2011
  • 20. Compare: Native Authentication COPYRIGHT VMWARE, INC, 2011
  • 21. OpenID “I'm Fred, show me my photos” User Relying Party APP OpenID Provider DB User details store COPYRIGHT VMWARE, INC, 2011
  • 22. OpenID ● Protocol for attribute exchange ● Sits on top of HTTP(S) ● Form plus JSONish on back channel (attribute fetch) ● Form data and redirects on front channel ● Does not specify authentication (up to the Provider) ● Does not require pre-registration of Relying Parties (Apps) ● Implemented in various languages, e.g. Java->OpenID4J (Google code) ● Support in Spring Security for Relying Party COPYRIGHT VMWARE, INC, 2011
  • 23. Spring Security OpenID RP <http xmlns="http://www.springframework.org/schema/security"> ... <openid-login login-page="/openid" user-service-ref="registeringUserService" authentication-failure-url="/login_error.jsp"> <attribute-exchange identifier-match=".*"> <openid-attribute name="email" Type="http://schema.openid.net/contact/email" required="true" /> <openid-attribute name="fullname" type="http://schema.openid.net/namePerson" required="true" /> </attribute-exchange> </openid-login> </http> COPYRIGHT VMWARE, INC, 2011
  • 24. SSO with OpenID “I'm Fred, show me my photos” User Relying Party APP1 “I'm Fred, can I buy a book?” APP2 OpenID DB Provider User details store COPYRIGHT VMWARE, INC, 2011
  • 25. SSO with OpenID No user input required here if IDP is stateful COPYRIGHT VMWARE, INC, 2011
  • 26. Delegation and Client Authorization ● So Fred told you to come and pick up his order? ● You say you're Martha? Show me some ID. ● And what about some documentation about the order? Resource Owner Client (e.g. a service provider) Scope of responsibility COPYRIGHT VMWARE, INC, 2011
  • 27. Delegation and Client Authorization ● An App needs to access Fred's resources on his behalf ● Resources live in a protected Resource Server (API) ● Fred is the Resource Owner: he can read and write his resources if he logs into the API himself ● But App is the Client of the API service not Fred, and Fred doesn't want to grant App write access ● Resource Server can grant App access to a restricted Scope of activity ● Fred authorizes the App to read his Resources ● App gets an Access Token that enables it to act on behalf of Fred ● Where does it get the token from? An Authorization Server COPYRIGHT VMWARE, INC, 2011
  • 28. Delegation “I'm Fred, show me my photos” Resource Client APP Owner Token API Resource Server Token Authorization AUTH Services Server COPYRIGHT VMWARE, INC, 2011
  • 29. Example Token Services using Shared Storage “I'm Fred, show me my photos” Resource Client APP Owner Token API Resource Server AUTH Authorization Server DB Token Store COPYRIGHT VMWARE, INC, 2011
  • 30. Delegation Standards ● SAML 1.0, 2.0 ● XML ● back channel Need key exchange ● cryptography ● Spring Security SAML, Service Provider = Resource Server only ● OAuth 1.0a ● plain text ● back channel Nonce and request token ● cryptography ● Spring Security OAuth (consumer and provider) ● OAuth 2 ● JSON (plus optional custom formats) ● no back channel in spec (but need token services in practice) ● clear text (need SSL), plus extensions ● Spring Security OAuth (consumer and provider) COPYRIGHT VMWARE, INC, 2011
  • 31. OAuth2 ● Client /app GET /api/photos Authorization: Bearer FDSHGK78JH356G ● Resource Server /api authenticated: 200 OK ... unauthenticated: 401 Unauthorized WWW-Authenticate: Bearer realm=”/auth” COPYRIGHT VMWARE, INC, 2011
  • 32. OAuth2 Acquiring an Access Token ● Grant Types ● Password ● Authorization Code ● Refresh Token ● Implicit ● Client Credentials ● Others allowed as extensions, e.g. SAML assertion COPYRIGHT VMWARE, INC, 2011
  • 33. OAuth2 Grant Type: Password ● Resource Server /api GET /auth/token?response_type=password&username=......&... Authorization: Basic asdsdfggghf= ● Authorization Server /auth Client credentials ● Token Endpoint 200 OK { “access_token” : “JAHDGFJH78IOUY”, “token_type” : “bearer”, “expires_in” : “3600” } COPYRIGHT VMWARE, INC, 2011
  • 34. OAuth2: Grant Type Password COPYRIGHT VMWARE, INC, 2011
  • 35. OAuth2 Grant Type: Authorization Code ● Client /app GET /auth/authorize?response_type=authorization_code&... Authorization: Basic asdsdfggghf= ● Authorization Server /auth ● Authorization Endpoint 302 Found Location: /app/photos?code=dfjhg COPYRIGHT VMWARE, INC, 2011
  • 36. OAuth2 Grant Type: Authorization Code ● Resource Server /api GET /auth/token?grant_type=authorization_code&code=......&... Authorization: Basic asdsdfggghf= ● Authorization Server /auth ● Token Endpoint 200 OK { “access_token” : “JAHDGFJH78IOUY”, “token_type” : “bearer”, “expires_in” : “3600” } COPYRIGHT VMWARE, INC, 2011
  • 37. OAuth2 Grant Type: Authorization Code ???? COPYRIGHT VMWARE, INC, 2011
  • 38. OAuth2 Grant Type: Authorization Code, Explicit Authorization The spec doesn't say how this happens, just that it does, e.g: ???? COPYRIGHT VMWARE, INC, 2011
  • 39. OAuth2: More Detail and Options ● Grant type ● Password – native apps, fixed authentication ● Authorization Code – webapps with browser redirects ● Refresh Token – optional for tokens issued with Auth Code ● Implicit – script clients in webapps, native apps ● Client Credentials – service peers ● Other, e.g. SAML ● Token type ● Bearer ● Other, e.g. MAC ● Scope ● Arbitrary string. Signifies something to Resource Server about which resources are available. C.f. “audience” in SAML. ● State COPYRIGHT VMWARE, INC, 2011
  • 40. Spring Security OAuth: Resource Server /api <sec:http ...> ... <sec:custom-filter ref="oauth2ServiceFilter" before="EXCEPTION_TRANSLATION_FILTER" /> </sec:http> <oauth:provider id="oauth2ServiceFilter" token-services-ref="tokenServices"> <oauth:resource-server resource-id="api" /> </oauth:provider> COPYRIGHT VMWARE, INC, 2011
  • 41. Spring Security OAuth: Authorization Server /auth <sec:http> ... <sec:custom-filter ref="oauth2ServiceFilter" after="EXCEPTION_TRANSLATION_FILTER" /> </sec:http> <oauth:provider id="oauth2ServiceFilter" token-services-ref="tokenServices"> <oauth:authorization-server client-details-service-ref="clientDetails"> <oauth:authorization-code /> <oauth:implicit /> <oauth:refresh-token /> <oauth:client-credentials /> <oauth:password /> </oauth:authorization-server> </oauth:provider> <oauth:client-details-service id="clientDetails"> <oauth:client clientId="app" authorizedGrantTypes="password,authorization_code,refresh_token" scope="read_photos" authorities="ROLE_GUEST" /> </oauth:client-details-service> COPYRIGHT VMWARE, INC, 2011
  • 42. Spring Security OAuth: Client /app <sec:http> ... <sec:custom-filter ref="oauth2ClientFilter" after="EXCEPTION_TRANSLATION_FILTER"/> </sec:http> <oauth:client id="oauth2ClientFilter" token-services-ref="oauth2TokenServices" /> <bean class="apiRestTemplate" class="org...oauth2.client.OAuth2RestTemplate"> <constructor-arg ref="api" /> </bean> <oauth:resource id="api" type="authorization_code" clientId="app" accessTokenUri="${accessTokenUri}" userAuthorizationUri="${userAuthorizationUri}" scope="read_photos" /> N.B. Spring Social has client support as well (similar approach, convergence will come later) COPYRIGHT VMWARE, INC, 2011
  • 43. OpenID Connect ● Similar to OpenID in the role that it plays, but not in any other way related ● Uses OAuth2 as a protocol for attribute exchange ● Google, Salesforce, etc. behind spec ● OAuth2 endpoints: ● /authorize ● /token ● OpenID endpoints are OAuth2 protected resources: ● /userinfo ● /check_id ● Clients obtain access token with scope=openid ● OAuth /token endpoint includes id token in response as well as access token ● Responses in JSON or JWT (=encrypted JSON) ● Not implemented in Spring project (yet), SECOAUTH or SEC COPYRIGHT VMWARE, INC, 2011
  • 44. OpenID Connect: Token Acquisition ● Resource Server /api GET /auth/token?grant_type=authorization_code&code=......&... Authorization: Basic asdsdfggghf= ● Authorization Server /auth ● Token Endpoint 200 OK { “access_token” : “JAHDGFJH78IOUY”, “token_type” : “bearer”, “expires_in” : “3600”, “scope” : “openid”, “id_token” : “LKJADSFKHJG8723E” } COPYRIGHT VMWARE, INC, 2011
  • 45. OpenID Connect: User Info ● Resource Server /api GET /auth/userinfo Authorization: Bearer JAHDGFJH78IOUY ● Authorization Server /auth ● User Info Endpoint 200 OK { “user_id” : “dsyer”, “name” : “Dave Syer”, “email” : “[email protected]”, ... } COPYRIGHT VMWARE, INC, 2011
  • 46. SCIM ● Simple Cloud Identity Management ● Plain test / JSON standard for provisioning identity systems ● Standard endpoints ● /Users – query user accounts ● /User – CRUD operations on users ● /Groups – CRUD operations on groups ● An OAuth2 authorization service might implement SCIM ● Not implemented (yet) in Spring COPYRIGHT VMWARE, INC, 2011
  • 47. Spring Security: Project Organization Luke Taylor (VMW), Core Robert Winch Spring Security Web ● 3.1.0 just released ● Stable, mature Ryan Heaton, LDAP OpenID ... Dave Syer (VMW), Spring Security OAuth Spring Extensions: Security Vladimir Schaefer, Keith Donald (VMW), Mike Wiesner (VMW) OAuth1a OAuth2 Craig Walls (VMW) SAML Kerberos Spring Social ● Oauth2 spec not yet final ● External lead ● 1.0.0 not yet released ● 1.0.0 just released ● Partly external, low-activity ● 1.0.0.M5 release in pipeline ● Consumer for well- known providers COPYRIGHT VMWARE, INC, 2011
  • 48. CloudFoundry IDM “I'm Fred, show me my apps” Resource Client Admin Console Owner Token CloudController Resource Server Authorization Access Token Server: UAA Decision Services OAuth2, OpenID Connect, Collab Spaces SCIM COPYRIGHT VMWARE, INC, 2011
  • 49. CloudFoundry IDM “I'm Fred, show me my apps” Resource Client VMC Owner Token CloudController Resource Server Authorization Access Token Server: UAA Decision Services OAuth2, OpenID Connect, Collab Spaces SCIM COPYRIGHT VMWARE, INC, 2011
  • 50. Links ● SECOAUTH: https://github.com/SpringSource/spring-security-oauth ● OpenId4J: http://code.google.com/p/openid4java/ ● OpenID Connect: http://openid.net/developers/specs/ ● OAuth2: http://tools.ietf.org/html/draft-ietf-oauth-v2 ● SCIM: http://www.simplecloud.info ● SES (SAML and Kerberos): http://static.springsource.org/spring-security/site/extensions.html ● Demos: http://gist.github.com/1316904 COPYRIGHT VMWARE, INC, 2011
  • 51. Overview ● What is Identity Management? ● Is it anything to do with Security? ● Some existing and emerging standards ● Relevant features of Spring Security and other Spring projects ● Common use cases ● Demo of prototype IDM system COPYRIGHT VMWARE, INC, 2011