49
OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control Maarten Balliauw - @maartenballiauw

OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Embed Size (px)

DESCRIPTION

API’s are the new apps. They can be consumed by everyone using a web browser or a mobile application on their smartphone or tablet. How would you build your API if you want these apps to be a full-fledged front-end to your service without compromising security? In this session, Maarten will explain how to build an API using the ASP.NET Web API framework and how the Windows Azure Access Control service can be used to almost completely outsource all security and OAuth-related tasks.

Citation preview

Page 1: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAuth-as-a-service

using ASP.NET Web API and Windows Azure Access Control

Maarten Balliauw - @maartenballiauw

Page 2: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf
Page 3: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Thanks to the sponsors

Page 4: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Who am I?• Maarten Balliauw• Antwerp, Belgium• www.realdolmen.com • Focus on web

– ASP.NET MVC, Windows Azure, SignalR, ...– MVP Windows Azure & ASPInsider

• http://blog.maartenballiauw.be • @maartenballiauw • Author: Pro NuGet - http://amzn.to/pronuget• www.myget.org

Page 5: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf
Page 6: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Agenda• Why would I need an API?• API characteristics• ASP.NET MVC Web API• Windows Azure ACS

Page 7: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

WHY WOULD I NEED AN API?

Page 8: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Consuming the web• 2000-2008: Desktop browser• 2008-2012: Mobile browser• 2008-2012: iPhone and Android apps• 2010-2014: Tablets, tablets, tablets• 2014-2016: Your fridge (Internet of Things)

Page 10: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

TWITTER & FACEBOOKBy show of hands…

Page 11: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

MAKE EVERYONE API(as the French say)

Page 12: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Expose services to 3rd parties

• Valuable• Flexible• Managed• Supported• Have a plan

Page 13: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Reach More Clients

Page 14: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

You’re not the only one

Source: http://blog.programmableweb.com/2012/04/16/open-apis-have-become-an-essential-piece-to-the-startup-model/

Page 15: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

API CHARACTERISTICS

Page 16: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

What is an API?• Software-to-Software interface• Contract between software and developers

– Functionalities, constraints (technical / legal) Programming instructions and standards

• Open services to other software developers (public or private)

Page 17: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Flavours• Transport

– HTTP– Sockets

• Message contract– SOAP– XML– Binary– JSON– HTML– …

Page 18: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Technical• Most API’s use HTTP and REST extensively

– Addressing– HTTP Verbs– Media types– HTTP status codes

Page 19: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

THE WEB IS AN APIDemo

Page 20: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

HTTP Verbs

• GET – return data• HEAD – check if the data exists• POST – create or update data• PUT – put data• MERGE – merge values with existing data• DELETE – delete data

Page 21: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Status codes• 200 OK – Everything is OK, your expected data is in the

response.• 401 Unauthorized – You either have to log in or you are

not allowed to access the resource.• 404 Not Found – The resource could not be found.• 500 Internal Server Error – The server failed processing

your request.• …

Page 22: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

BE DETAILED!Think RFC2324!

Page 23: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

ASP.NET WEB API

Page 24: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

ASP.NET Web API• Part of ASP.NET MVC 4• Framework to build HTTP Services (REST)• Solid features

– Modern HTTP programming model– Content negotiation (e.g. xml, json, ...)– Query composition (OData query support)– Model binding and validation (conversion to .NET objects)– Routes– Filters (e.g. Validation, exception handling, ...)– And more!

Page 25: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

ASP.NET Web API is easy!• HTTP Verb = action• “Content-type” header = data format in• “Accept” header = data format out• Return meaningful status code

Page 26: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

CREATING AN API USING ASP.NET WEB APIDemo

Page 27: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Securing your API• No authentication• Basic/Windows authentication• [Authorize] attribute

Page 28: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

SECURING YOUR APIDemo

Page 29: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

A lot of public API’s…

“your API consumer isn’t really your user, but an application acting on behalf of a user”

(or: API consumer != user)

Page 30: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAUTH2

Page 31: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAuth2 +--------+ +---------------+ | |--(A)- Authorization Request ->| Resource | | | | Owner | | |<-(B)-- Authorization Grant ---| | | | +---------------+ | | . | | +---------------+ | |--(C)-- Authorization Grant -->| Authorization | | Client | | Server | | |<-(D)----- Access Token -------| | | | +---------------+ | | . | | +---------------+ | |--(E)----- Access Token ------>| Resource | | | | Server | | |<-(F)--- Protected Resource ---| | +--------+ +---------------+

Figure 1: Abstract Protocol Flow

http://tools.ietf.org/html/draft-ietf-oauth-v2-31

Page 32: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Guest badges• Building owner / colleague full-access badge• Guest badge

– Your name on it– Limited scope (only 7th floor)– Limited validity (only today)

Page 33: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAuth2 +--------+ +---------------+ | |--(A)- Can has guest access? ->| Building | | | | Owner | | |<-(B)– Sure, ask reception ---| | | | +---------------+ | | . | | +---------------+ | |--(C)–--- Can has badge? ----->| Reception | | Client | | | | |<-(D) Badge (today;7th floor) -| | | | +---------------+ | | . | | +---------------+ | |--(E)-------- Badge ---------->| 7th floor | | | | coffee | | |<-(F)-------- Coffee! ---------| machine | +--------+ +---------------+

By the way: tomorrow, you’ll have to go to the reception again to “refresh” your badge.

Page 34: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Quick side note…• There are 3 major authentication flows• Based on type of client• Variants possible

Page 35: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

On the web…

Page 36: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAuth2 – Initial flow

Page 37: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAuth2 – “Refresh” (one of those variants)

Page 38: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Access tokens / Refresh tokens• In theory: whatever format you want• Widely used: JWT (“JSON Web Token”)• Less widely used: SWT (“Simple Web Token”)• Signed / Encrypted

Page 39: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Header:{"alg":"none"}

Token:{"iss":"joe", "exp":1300819380, "http://some.ns/read":true}

Page 40: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Is OAuth2 different from OpenID?• Yes.• OpenID = authN• OAuth2 = authN (optional) + authZ

• http://softwareas.com/oauth-openid-youre-barking-up-the-wrong-tree-if-you-think-theyre-the-same-thing

Page 41: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

What you have to implement• OAuth authorization server• Keep track of supported consumers• Keep track of user consent• OAuth token expiration & refresh• Oh, and your API

AARGH!

Page 42: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

WINDOWS AZUREACCESS CONTROL SERVICE

Page 43: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

ACS - Identity in Windows Azure• Active Directory federation• Graph API• Web SSO• Link apps to identity providers using rules• Support WS-Security, WS-Federation, SAML• Little known feature: OAuth2 delegation

Page 44: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAuth flow using ACS

Page 45: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

ASP.NET WEB API, OAUTH2, WINDOWS AZURE ACSDemo

Page 46: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

OAuth2 delegation?• You: OAuth authorization server• ACS: Keep track of supported consumers• ACS: Keep track of user consent• ACS: OAuth token expiration & refresh• You: Your API

Page 47: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

CONCLUSION

Page 48: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Key takeaways• API’s are the new apps• Valuable• HTTP• ASP.NET Web API• Windows Azure Access Control Service

Page 49: OAuth-as-a-service using ASP.NET Web API and Windows Azure Access Control - WebNetConf

Please rate this sessionScan the code, go online, rate this session

Thank you!http://blog.maartenballiauw.be@maartenballiauw