SlideShare a Scribd company logo
Securing RESTful 
Resources with OAuth2 
Rodrigo Cândido da Silva 
@rcandidosilva 
JavaOne 2014 
CON4990
About Me 
• Brazilian guy ;) 
• Software Architect 
• Java Platform 
• Work for Integritas Tech 
• http://integritastech.com 
• JUG Leader of GUJavaSC 
• http://gujavasc.org 
• Twitter 
• @rcandidosilva 
• Personal 
• http://rodrigocandido.me
Agenda 
• Why use OAuth2? 
• OAuth2 concepts 
• Grant types 
• OAuth2 Tokens 
• Java Implementations 
• Demo
Public Web Service API’s
Security 
Closed 
Closed 
Open 
Authentication Authorization
Securing APIs 
• Securing resources strategies 
• Basic Auth (HTTP Basic) 
• Sending user credentials in http authentication header 
• Mutual Authentication (HTTP Digest) 
• Based on certificates, server authenticate to client, client to server 
• RESTful architecture not defines security procedures 
• HTTP methods: GET, POST, PUT, DELETE 
• REST API’s are equal vulnerable as standard web apps 
• Injection attacks, replay attacks, cross-site scripting, etc.
Without OAuth
With OAuth
Why OAuth 
• Open standard protocol specification defined by IETF 
• Enables applications to access each other’s data without 
sharing credentials 
• Avoid password issues 
• User and password authentication is fine, but what if your API 
needs to be used by other apps? 
• Required for delegating access 
• Third party applications 
• For specified resource 
• For limited time 
• Can be selectively be revoked
Who is using OAuth
OAuth Timeline 
• OAuth 1.0 
• Core specification published in Dec 2007 
• OAuth 1.0a 
• Revised specification published in June 2009 
• Related to fix a security issue 
• OAuth 2.0 
• Standardized since Oct-2012 
• Be more secure, simple, and standard 
• Additional RFCs are still being worked on
OAuth2 
• No username or passwords (only tokens) 
• Protocol for authorization – not authentication 
• Delegated model 
• Fix the password anti-pattern 
• Trust relationship between resource, identity server and client app 
• Goal was simplicity 
• Relies heavily on TLS/SSL 
• Not backwards compatible 
• Easily to revoke
OAuth2 Roles 
• Resource Owner 
• Entity capable of granting 
access to a protected resource 
• Client Application 
• Application making protected resource requests on behalf of 
the resource owner 
• Resource Server 
• The server hosting the protected resources 
• Authorization Server 
• The server issuing access tokens to the clients
OAuth2 Basic Flow
OAuth2 Grant Types 
• Authorization Code (web apps) 
• Optimized for confidential clients 
• Uses a authorization code from the server 
• Implicit (browser-based and mobile apps) 
• Optimized for script heavy web apps 
• User can see the access token 
• Resource Owner Password Credentials (user / password) 
• Used in cases where the user trusts the client 
• Exposes user credentials to the client 
• Client Credentials (application) 
• Clients gets an access token based on client credentials only
Authorization Code
Implicit
Resource Owner Password Credentials
Client Credentials
OAuth2 Tokens 
• Types 
• Bearer 
• Large random token 
• Need SSL to protect it in transit 
• Server needs to store it securely hashed like a user password 
• Mac 
• Uses a nonce to prevent replay 
• Does not required SSL 
• OAuth 1.0 only supported 
• Access Token 
• Short-lived token 
• Refresh Token 
• Long-lived token 
{ 
"access_token":"2YotnFZFEjr1zCsicMWpAA", 
"token_type":“bearer", 
"expires_in":3600, 
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", 
}
OAuth2 Pros & Cons 
• Pros 
• Integration of third party apps to any sites 
• Access can be granted for limited scope or duration 
• No need for users to give password on third party 
site 
• Cons 
• Writing an authorization server is somewhat 
complex 
• Interoperability issues 
• Bad implementations can be security issues
OAuth2 Java Implementations 
• Some Java implementations available 
• Jersey 
• Apache Oltu 
• Spring Security OAuth2 
• And others: CXF, Google OAuth2 API, etc 
• Not available as Java EE standard yet
Jersey 
• Open source RESTful Web services framework 
• The JAX-RS reference implementation 
• Integrates with the Java EE standard security 
• @RolesAllowed 
• @PermitAll 
• @DenyAll 
• Supports entity filtering features 
• @EntityFiltering 
• Only supports OAuth2 at client side :/
Jersey 
Java EE security integration 
@Path("restricted-resource") 
@Produces("application/json") 
public class RestrictedResource { 
@GET @Path(”denyAll") 
@DenyAll 
public RestrictedEntity denyAll() { ... } 
@GET @Path("rolesAllowed") 
@RolesAllowed({"manager"}) 
public RestrictedEntity rolesAllowed() { ... } 
}
Jersey 
OAuth2 client support 
OAuth2CodeGrantFlow.Builder builder = 
OAuth2ClientSupport 
.authorizationCodeGrantFlowBuilder( 
clientId, 
"https://example.com/oauth/authorization", 
"https://example.com/oauth/token"); 
OAuth2CodeGrantFlow flow = builder.property( 
OAuth2CodeGrantFlow.Phase.AUTHORIZATION, 
"readOnly", "true") 
.scope("contact") 
.build(); 
String authorizationUri = flow.start(); 
... 
final TokenResult result = flow.finish(code, state); 
...
Apache Oltu 
• Apache OAuth protocol implementation 
• It also covers others related implementations 
• JSON Web Token (JWT) 
• JSON Web Signature (JWS) 
• OpenID Connect 
• Supports the full OAuth2 features 
• Authorization Server 
• Resource Server 
• Client 
• Provides predefined OAuth2 client types 
• Facebook, Foursquare, Github, Google, etc 
• Still being improved…
Apache Oltu 
Authorization endpoint 
protected void doGet(HttpServletRequest request, 
HttpServletResponse response) 
throws ServletException, IOException { 
//dynamically recognize an OAuth profile and perform validation 
OAuthAuthzRequest oauthRequest = new OAuthAuthzRequest(request); 
validateRedirectionURI(oauthRequest) 
//build OAuth response 
OAuthResponse resp = OAuthASResponse 
.authorizationResponse(HttpServletResponse.SC_FOUND) 
.setCode(oauthIssuerImpl.authorizationCode()) 
.location(ex.getRedirectUri()) 
.buildQueryMessage(); 
response.sendRedirect(resp.getLocationUri()); 
}
Apache Oltu 
Token endpoint 
protected void doPost(HttpServletRequest request, 
HttpServletResponse response) 
throws ServletException, IOException { 
OAuthIssuer oauthIssuerImpl = 
new OAuthIssuerImpl(new MD5Generator()); 
OAuthTokenRequest oauthRequest = 
new OAuthTokenRequest(request); 
validateClient(oauthRequest); 
String authzCode = oauthRequest.getCode(); 
String accessToken = oauthIssuerImpl.accessToken(); 
String refreshToken = oauthIssuerImpl.refreshToken(); 
OAuthResponse r = OAuthASResponse(...); 
}
Apache Oltu 
Protecting the resources 
protected void doGet(HttpServletRequest request, 
HttpServletResponse response) 
throws ServletException, IOException { 
// Make the OAuth Request and validate it 
OAuthAccessResourceRequest oauthRequest = new 
OAuthAccessResourceRequest(request, 
ParameterStyle.BODY); 
// Get the access token 
String accessToken = 
oauthRequest.getAccessToken(); 
//... validate access token 
}
Apache Oltu 
OAuth2 client 
OAuthClientRequest request = OAuthClientRequest 
.tokenProvider(OAuthProviderType.FACEBOOK) 
.setGrantType(GrantType.AUTHORIZATION_CODE) 
.setClientId("your-facebook-application-client-id") 
.setClientSecret("your-facebook-application-client-secret") 
.setRedirectURI("http://www.example.com/redirect") 
.setCode(code) 
.buildQueryMessage(); 
//create OAuth client that uses custom http client under the hood 
OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); 
OAuthAccessTokenResponse oAuthResponse = 
oAuthClient.accessToken(request); 
String accessToken = oAuthResponse.getAccessToken(); 
String expiresIn = oAuthResponse.getExpiresIn();
Spring Security OAuth 
• Provides OAuth (1a) and OAuth2 support 
• Implements 4 types of authorization grants 
• Supports the OAuth2 full features 
• Authorization Server 
• Resources Server 
• Client 
• Good integration with JAX-RS and Spring MVC 
• Configuration using annotation support 
• Integrates with the Spring ecosystem
Spring Authorization Server 
• @EnableAuthorizationServer 
• Annotation used to configure OAuth2 authorization server 
• There is also XML configuration related <authorization-server/> 
• ClientDetailsServiceConfigurer 
• Defines the client details service 
• In-memory or JDBC implementation 
• AuthorizationServerTokenServices 
• Operations to manage OAuth2 tokens 
• Tokens in-memory, JDBC or JSON Web Token (JWT) 
• AuthorizationServerEndpointConfigurer 
• Grant types supported by the server 
• All grant types are supported except password types
Spring Resource Server 
• Can be the same as Authorization Server 
• Or deployed in a separate application 
• Provides a authentication filter for web protection 
• @EnableResourceServer 
• Annotation used to configure OAuth2 resource server 
• There is also XML configuration related <resource-server/> 
• Supports expression-based access control 
• #oauth2.clientHasRole 
• #oauth2.clientHasAnyRole 
• #oauth2.denyClient
Spring OAuth2 Client 
• Creates a filter to store the current request and context 
• Manages the redirection to and from the OAuth 
authentication URI 
• @EnableOAuth2Client 
• Annotation used to configure OAuth2 client 
• There is also XML configuration related <client/> 
• OAuth2RestTemplate 
• Wrapper client object to access the resources
Demo 
• OAuth2 Use Case 
• Conference application sharing resources with different clients 
• http://github.com/rcandidosilva/rest-oauth2-sample
Questions 
?
References 
• http://oauth.net/2/ 
• http://tools.ietf.org/html/rfc6749 
• http://projects.spring.io/spring-security-oauth/ 
• https://github.com/spring-projects/spring-security-oauth 
• http://cxf.apache.org/docs/jax-rs-oauth2.html 
• https://jersey.java.net/documentation/latest/security.html#d0e10940 
• https://oltu.apache.org
Thank you! 
@rcandidosilva 
rodrigocandido.me

More Related Content

PDF
SAML VS OAuth 2.0 VS OpenID Connect
PDF
Exploiting Deserialization Vulnerabilities in Java
PDF
Implementing OAuth
ODP
OAuth2 - Introduction
PPTX
OAuth 2
PPTX
Rest API Security
PDF
OAuth 2.0 and OpenID Connect
PDF
OpenID Connect Explained
SAML VS OAuth 2.0 VS OpenID Connect
Exploiting Deserialization Vulnerabilities in Java
Implementing OAuth
OAuth2 - Introduction
OAuth 2
Rest API Security
OAuth 2.0 and OpenID Connect
OpenID Connect Explained

What's hot (20)

PDF
[OPD 2019] Attacking JWT tokens
PDF
OAuth 2.0
PPTX
Json Web Token - JWT
PPTX
OpenID Connect: An Overview
PDF
PDF
Keycloak Single Sign-On
PPTX
OAuth2 + API Security
PPTX
Web API authentication and authorization
PPTX
An Introduction to OAuth2
PPTX
An Introduction to OAuth 2
PPTX
JavaScript
PDF
State of the art authentication mit Java EE 8
PDF
Implementing security requirements for banking API system using Open Source ...
PDF
JavaScript Fetch API
PDF
Katalon Studio - Best automation solution for software testing team
PPTX
Cookies and sessions
PDF
Spring Boot
PPTX
An introduction to OAuth 2
[OPD 2019] Attacking JWT tokens
OAuth 2.0
Json Web Token - JWT
OpenID Connect: An Overview
Keycloak Single Sign-On
OAuth2 + API Security
Web API authentication and authorization
An Introduction to OAuth2
An Introduction to OAuth 2
JavaScript
State of the art authentication mit Java EE 8
Implementing security requirements for banking API system using Open Source ...
JavaScript Fetch API
Katalon Studio - Best automation solution for software testing team
Cookies and sessions
Spring Boot
An introduction to OAuth 2
Ad

Similar to JavaOne 2014 - Securing RESTful Resources with OAuth2 (20)

PDF
ConFoo 2015 - Securing RESTful resources with OAuth2
PPTX
Web API 2 Token Based Authentication
PPTX
GSoC Mideterm-OAuth2 Module
PPTX
OAuth 2.0 at the Globiots
PDF
Building an Effective Architecture for Identity and Access Management.pdf
PPTX
Authenticating Angular Apps with JWT
PPTX
REST API Security: OAuth 2.0, JWTs, and More!
PDF
AllTheTalks.Online 2020: "Basics of OAuth 2.0 and OpenID Connect"
PPTX
Introduction to sitecore identity
PPTX
DDD Melbourne 2014 security in ASP.Net Web API 2
PDF
Authentication in microservice systems - fsto 2017
PDF
Securing Microservices using Play and Akka HTTP
PPTX
Adding Identity Management and Access Control to your App
PDF
Introduction to OAuth
PPTX
Api security
PPTX
Comprehensive_SpringBoot_Auth.pptx wokring
PDF
Java EE Security API - JSR375: Getting Started
PPTX
Adding identity management and access control to your app
PDF
Getting Started with Spring Authorization Server
PPTX
JWT Authentication with AngularJS
ConFoo 2015 - Securing RESTful resources with OAuth2
Web API 2 Token Based Authentication
GSoC Mideterm-OAuth2 Module
OAuth 2.0 at the Globiots
Building an Effective Architecture for Identity and Access Management.pdf
Authenticating Angular Apps with JWT
REST API Security: OAuth 2.0, JWTs, and More!
AllTheTalks.Online 2020: "Basics of OAuth 2.0 and OpenID Connect"
Introduction to sitecore identity
DDD Melbourne 2014 security in ASP.Net Web API 2
Authentication in microservice systems - fsto 2017
Securing Microservices using Play and Akka HTTP
Adding Identity Management and Access Control to your App
Introduction to OAuth
Api security
Comprehensive_SpringBoot_Auth.pptx wokring
Java EE Security API - JSR375: Getting Started
Adding identity management and access control to your app
Getting Started with Spring Authorization Server
JWT Authentication with AngularJS
Ad

More from Rodrigo Cândido da Silva (20)

PDF
Java 9, 10 e ... 11
PDF
Cloud Native Java EE
PDF
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
PDF
Protecting Java Microservices: Best Practices and Strategies
PDF
As novidades da nova versão do Java 9
PDF
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
PDF
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
PDF
Workshop Microservices - Construindo APIs RESTful com Spring Boot
PDF
Workshop Microservices - Arquitetura Microservices
PDF
GUJavaSC - Protegendo Microservices em Java
PDF
TDC Floripa 2017 - Criando Microservices Reativos com Java
PDF
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
PDF
GUJavaSC - Criando Micro-serviços Reativos com Java
PDF
JavaOne 2016 - Reactive Microservices with Java and Java EE
PDF
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
PDF
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
PDF
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
PDF
GUJavaSC - Combinando AngularJS com Java EE
PDF
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
PDF
QCon 2015 - Combinando AngularJS com Java EE
Java 9, 10 e ... 11
Cloud Native Java EE
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protecting Java Microservices: Best Practices and Strategies
As novidades da nova versão do Java 9
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Arquitetura Microservices
GUJavaSC - Protegendo Microservices em Java
TDC Floripa 2017 - Criando Microservices Reativos com Java
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Criando Micro-serviços Reativos com Java
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
GUJavaSC - Combinando AngularJS com Java EE
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon 2015 - Combinando AngularJS com Java EE

Recently uploaded (20)

PDF
Encapsulation theory and applications.pdf
PPT
Teaching material agriculture food technology
PDF
Approach and Philosophy of On baking technology
PDF
Modernizing your data center with Dell and AMD
PDF
cuic standard and advanced reporting.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
KodekX | Application Modernization Development
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Encapsulation theory and applications.pdf
Teaching material agriculture food technology
Approach and Philosophy of On baking technology
Modernizing your data center with Dell and AMD
cuic standard and advanced reporting.pdf
Big Data Technologies - Introduction.pptx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
The AUB Centre for AI in Media Proposal.docx
KodekX | Application Modernization Development
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Building Integrated photovoltaic BIPV_UPV.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Understanding_Digital_Forensics_Presentation.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
NewMind AI Monthly Chronicles - July 2025
Advanced methodologies resolving dimensionality complications for autism neur...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...

JavaOne 2014 - Securing RESTful Resources with OAuth2

  • 1. Securing RESTful Resources with OAuth2 Rodrigo Cândido da Silva @rcandidosilva JavaOne 2014 CON4990
  • 2. About Me • Brazilian guy ;) • Software Architect • Java Platform • Work for Integritas Tech • http://integritastech.com • JUG Leader of GUJavaSC • http://gujavasc.org • Twitter • @rcandidosilva • Personal • http://rodrigocandido.me
  • 3. Agenda • Why use OAuth2? • OAuth2 concepts • Grant types • OAuth2 Tokens • Java Implementations • Demo
  • 5. Security Closed Closed Open Authentication Authorization
  • 6. Securing APIs • Securing resources strategies • Basic Auth (HTTP Basic) • Sending user credentials in http authentication header • Mutual Authentication (HTTP Digest) • Based on certificates, server authenticate to client, client to server • RESTful architecture not defines security procedures • HTTP methods: GET, POST, PUT, DELETE • REST API’s are equal vulnerable as standard web apps • Injection attacks, replay attacks, cross-site scripting, etc.
  • 9. Why OAuth • Open standard protocol specification defined by IETF • Enables applications to access each other’s data without sharing credentials • Avoid password issues • User and password authentication is fine, but what if your API needs to be used by other apps? • Required for delegating access • Third party applications • For specified resource • For limited time • Can be selectively be revoked
  • 10. Who is using OAuth
  • 11. OAuth Timeline • OAuth 1.0 • Core specification published in Dec 2007 • OAuth 1.0a • Revised specification published in June 2009 • Related to fix a security issue • OAuth 2.0 • Standardized since Oct-2012 • Be more secure, simple, and standard • Additional RFCs are still being worked on
  • 12. OAuth2 • No username or passwords (only tokens) • Protocol for authorization – not authentication • Delegated model • Fix the password anti-pattern • Trust relationship between resource, identity server and client app • Goal was simplicity • Relies heavily on TLS/SSL • Not backwards compatible • Easily to revoke
  • 13. OAuth2 Roles • Resource Owner • Entity capable of granting access to a protected resource • Client Application • Application making protected resource requests on behalf of the resource owner • Resource Server • The server hosting the protected resources • Authorization Server • The server issuing access tokens to the clients
  • 15. OAuth2 Grant Types • Authorization Code (web apps) • Optimized for confidential clients • Uses a authorization code from the server • Implicit (browser-based and mobile apps) • Optimized for script heavy web apps • User can see the access token • Resource Owner Password Credentials (user / password) • Used in cases where the user trusts the client • Exposes user credentials to the client • Client Credentials (application) • Clients gets an access token based on client credentials only
  • 18. Resource Owner Password Credentials
  • 20. OAuth2 Tokens • Types • Bearer • Large random token • Need SSL to protect it in transit • Server needs to store it securely hashed like a user password • Mac • Uses a nonce to prevent replay • Does not required SSL • OAuth 1.0 only supported • Access Token • Short-lived token • Refresh Token • Long-lived token { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":“bearer", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", }
  • 21. OAuth2 Pros & Cons • Pros • Integration of third party apps to any sites • Access can be granted for limited scope or duration • No need for users to give password on third party site • Cons • Writing an authorization server is somewhat complex • Interoperability issues • Bad implementations can be security issues
  • 22. OAuth2 Java Implementations • Some Java implementations available • Jersey • Apache Oltu • Spring Security OAuth2 • And others: CXF, Google OAuth2 API, etc • Not available as Java EE standard yet
  • 23. Jersey • Open source RESTful Web services framework • The JAX-RS reference implementation • Integrates with the Java EE standard security • @RolesAllowed • @PermitAll • @DenyAll • Supports entity filtering features • @EntityFiltering • Only supports OAuth2 at client side :/
  • 24. Jersey Java EE security integration @Path("restricted-resource") @Produces("application/json") public class RestrictedResource { @GET @Path(”denyAll") @DenyAll public RestrictedEntity denyAll() { ... } @GET @Path("rolesAllowed") @RolesAllowed({"manager"}) public RestrictedEntity rolesAllowed() { ... } }
  • 25. Jersey OAuth2 client support OAuth2CodeGrantFlow.Builder builder = OAuth2ClientSupport .authorizationCodeGrantFlowBuilder( clientId, "https://example.com/oauth/authorization", "https://example.com/oauth/token"); OAuth2CodeGrantFlow flow = builder.property( OAuth2CodeGrantFlow.Phase.AUTHORIZATION, "readOnly", "true") .scope("contact") .build(); String authorizationUri = flow.start(); ... final TokenResult result = flow.finish(code, state); ...
  • 26. Apache Oltu • Apache OAuth protocol implementation • It also covers others related implementations • JSON Web Token (JWT) • JSON Web Signature (JWS) • OpenID Connect • Supports the full OAuth2 features • Authorization Server • Resource Server • Client • Provides predefined OAuth2 client types • Facebook, Foursquare, Github, Google, etc • Still being improved…
  • 27. Apache Oltu Authorization endpoint protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //dynamically recognize an OAuth profile and perform validation OAuthAuthzRequest oauthRequest = new OAuthAuthzRequest(request); validateRedirectionURI(oauthRequest) //build OAuth response OAuthResponse resp = OAuthASResponse .authorizationResponse(HttpServletResponse.SC_FOUND) .setCode(oauthIssuerImpl.authorizationCode()) .location(ex.getRedirectUri()) .buildQueryMessage(); response.sendRedirect(resp.getLocationUri()); }
  • 28. Apache Oltu Token endpoint protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OAuthIssuer oauthIssuerImpl = new OAuthIssuerImpl(new MD5Generator()); OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request); validateClient(oauthRequest); String authzCode = oauthRequest.getCode(); String accessToken = oauthIssuerImpl.accessToken(); String refreshToken = oauthIssuerImpl.refreshToken(); OAuthResponse r = OAuthASResponse(...); }
  • 29. Apache Oltu Protecting the resources protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Make the OAuth Request and validate it OAuthAccessResourceRequest oauthRequest = new OAuthAccessResourceRequest(request, ParameterStyle.BODY); // Get the access token String accessToken = oauthRequest.getAccessToken(); //... validate access token }
  • 30. Apache Oltu OAuth2 client OAuthClientRequest request = OAuthClientRequest .tokenProvider(OAuthProviderType.FACEBOOK) .setGrantType(GrantType.AUTHORIZATION_CODE) .setClientId("your-facebook-application-client-id") .setClientSecret("your-facebook-application-client-secret") .setRedirectURI("http://www.example.com/redirect") .setCode(code) .buildQueryMessage(); //create OAuth client that uses custom http client under the hood OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); OAuthAccessTokenResponse oAuthResponse = oAuthClient.accessToken(request); String accessToken = oAuthResponse.getAccessToken(); String expiresIn = oAuthResponse.getExpiresIn();
  • 31. Spring Security OAuth • Provides OAuth (1a) and OAuth2 support • Implements 4 types of authorization grants • Supports the OAuth2 full features • Authorization Server • Resources Server • Client • Good integration with JAX-RS and Spring MVC • Configuration using annotation support • Integrates with the Spring ecosystem
  • 32. Spring Authorization Server • @EnableAuthorizationServer • Annotation used to configure OAuth2 authorization server • There is also XML configuration related <authorization-server/> • ClientDetailsServiceConfigurer • Defines the client details service • In-memory or JDBC implementation • AuthorizationServerTokenServices • Operations to manage OAuth2 tokens • Tokens in-memory, JDBC or JSON Web Token (JWT) • AuthorizationServerEndpointConfigurer • Grant types supported by the server • All grant types are supported except password types
  • 33. Spring Resource Server • Can be the same as Authorization Server • Or deployed in a separate application • Provides a authentication filter for web protection • @EnableResourceServer • Annotation used to configure OAuth2 resource server • There is also XML configuration related <resource-server/> • Supports expression-based access control • #oauth2.clientHasRole • #oauth2.clientHasAnyRole • #oauth2.denyClient
  • 34. Spring OAuth2 Client • Creates a filter to store the current request and context • Manages the redirection to and from the OAuth authentication URI • @EnableOAuth2Client • Annotation used to configure OAuth2 client • There is also XML configuration related <client/> • OAuth2RestTemplate • Wrapper client object to access the resources
  • 35. Demo • OAuth2 Use Case • Conference application sharing resources with different clients • http://github.com/rcandidosilva/rest-oauth2-sample
  • 37. References • http://oauth.net/2/ • http://tools.ietf.org/html/rfc6749 • http://projects.spring.io/spring-security-oauth/ • https://github.com/spring-projects/spring-security-oauth • http://cxf.apache.org/docs/jax-rs-oauth2.html • https://jersey.java.net/documentation/latest/security.html#d0e10940 • https://oltu.apache.org
  • 38. Thank you! @rcandidosilva rodrigocandido.me