<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.apigee.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>

  <title>Apigee Blog</title>
  <link>http://blog.apigee.com/</link>
  <description />
  <dc:language>en</dc:language>
  <dc:creator>marketing@apigee.com</dc:creator>
  <dc:rights>Copyright 2012</dc:rights>
  <dc:date>2012-02-22T07:36:01+00:00</dc:date>
  <admin:generatorAgent rdf:resource="http://expressionengine.com/" />

  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.apigee.com/ApigeeBlog" /><feedburner:info uri="apigeeblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
    <title>Protecting users, apps, and APIs from abuse</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/-gogegQ9Ir4/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/protecting_users_apps_and_apis_from_abuse/</guid>
    <description>&lt;p&gt;Abusers or spammers are the bad guys looking to make money by getting unsuspecting end users or consumers of online services to interact with malicious content or spam that leads to one or more of the following scenarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eyeballs on spam content that lead to clicks and purchases. &lt;/li&gt;
&lt;li&gt;Gathering users&amp;rsquo; private information through keyloggers (or other spyware) on the user&amp;rsquo;s machine or device which is then sold to the highest bidder. &lt;/li&gt;
&lt;li&gt;Phishing for users&amp;rsquo; private information such as SSN, credit card #, or passwords and selling those to the highest bidder.&lt;/li&gt;
&lt;li&gt;Installing malicious software on users&amp;rsquo; machines or devices, which in turn steals more of their information or uses their bandwidth or storage for carrying our further attacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Any workflow that creates or consumes content, shares or reshares content, sends or receives communications can be vulnerable to attack.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Online attacks almost always contain a "payload" that either delivers the attack or leads the user to another location where the attack is completed. Any time a piece of content is created or consumed or a communication is sent or received, there is an inherent "payload" that is delivered. In the wrong hands, this payload can be malicious.&lt;/p&gt;
&lt;p&gt;Blogs can be spammed with comments which contain spam or malware, or which employ phishing techniques that redirect users to other malicious locations on the Internet.&lt;/p&gt;
&lt;p&gt;In the same way, users can receive emails that contain spam or malware or other phishing techniques. Users can be redirected to malicious sites in their browser. Users' machines can be attacked and malware (such as adware, spyware, key loggers and viruses) installed which can scrape users&amp;rsquo; private information and send it to the abusers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thinking about apps and APIs as assets&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Apps like APIs can be considered "assets" that can be used to carry out attacks against end users.&lt;/p&gt;
&lt;p&gt;APIs (and especially free APIs) provide services that eventually reach other users. Even if an API has a usage cost associated with it, if the return on investment for an abuser for planning and carrying out an attack is higher than the cost of using the API (at scale), even paid APIs can be abused.&lt;/p&gt;
&lt;p&gt;Both developers and enterprises have apps that are highly monetizable if abused. App-based attacks fall into the following general categories:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;Malicious apps&lt;/strong&gt;: These apps are written with the sole goal of abusing unsuspecting users who download and install them. With the increasing use of single sign on services and integration of social networks with apps through social network platforms, a user's social network can be used to propagate these attacks.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;Well-intentioned apps with vulnerabilities&lt;/strong&gt;: These apps are not written to be malicious but have vulnerabilities either in their code (e.g. the apps's functionality can be scripted or controlled through hooks provided by the app) or in their business logic (e.g. no throttling of calls from a single user to the back-end system). An abuser can exploit these vulnerabilities to carry out attacks on enterprise APIs or on the end users of the apps.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;Well intentioned apps exploited by a malicious user:&lt;/strong&gt; In this case, an abuser can use some legitimate capability offered by the app as a foundation to carry out attacks that propagate through the end user's social network and spread through further usage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Protecting your assets&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You don't want your APIs or apps used for abuse. It is crucial for both developers and enterprises to protect their &amp;ldquo;assets&amp;rdquo;. If an end user develops a perception that a certain app or service is "dangerous", usage declines, growth can be reversed, and revenue and profit suffer.&lt;/p&gt;
&lt;p&gt;Remember that abusers are most often out there to make money and if the cost to carry out an attack is less than the value derived from the attack, it will continue to be a sound business investment for the abusers.&lt;/p&gt;
&lt;p&gt;Some things that developers can do to protect their apps and end users (and their friends)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monitor usage of your app and its impact on the users. Build and maintain a proxy for user reputation and models of good and bad behavior in the content of the app.&lt;/li&gt;
&lt;li&gt;Enable end users to report suspicious behavior of the app or of other users of the app. &lt;/li&gt;
&lt;li&gt;Work with the enterprise or API provider to ensure that your app is not creating suspicious loads on the API.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;Some things that enterprises can do to protect their APIs&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build traffic monitoring solutions and models to rate traffic as safe or abusive.&lt;/li&gt;
&lt;li&gt;Ensure that any content or communication created or shared through the API is free of malicious payloads. &lt;/li&gt;
&lt;li&gt;Invest in mechanisms to report and notify suspicious user and app behavior to the app developers.&lt;/li&gt;
&lt;li&gt;Build reputation systems for users, content and IP addresses to be able to quickly classify traffic, users and apps as good or bad OR desirable or undesirable.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;Next time we'll look at some of the ways to push back against attackers, including use of quotas, throttling, and so on.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/-gogegQ9Ir4" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices API, apps, monitoring, security, abuse, spam</dc:subject>
    <dc:date>2012-02-22T06:36:01+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/protecting_users_apps_and_apis_from_abuse/</feedburner:origLink></item>
  
  <item>
    <title>Data Analytics &amp;amp; APIs</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/rEVGO0iyg0Y/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/data_analytics_apis/</guid>
    <description>&lt;p&gt;There's an explosion of developers building mobile and web apps. There's also an explosion in APIs as enterprises adopt API strategies to open up access to their back-end systems to enable developers. As a result, more transactions flow from end users and developers to enterprises increasing reach, revenue, and profit for enterprises.&lt;/p&gt;
&lt;p&gt;In this short video, I talk about how to think about analytics as a peer of your APIs and the role analytics plays in having your API strategy succeed.&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="355" src="http://www.youtube.com/embed/5UiN3ogGsrk" width="425"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Every enterprise expects to  see increasing rate of transactions (sales, subscriptions, etc.) over  time. API-delivered&amp;nbsp; transactions are going to contribute an  increasingly larger fraction to this top or bottom line.&lt;/p&gt;
&lt;p&gt;For an enterprise that is early in its API journey, a small fraction of total transactions come from APIs.&lt;/p&gt;
&lt;p&gt;For an enterprise in a later stage of its API program, APIs contribute a much larger fraction of the total transactions.&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/uploads/API_analytics_thumb.png" /&gt;&lt;br /&gt;For  all these companies, analytics on APIs benefit many constituents  including developers, API managers, operations teams, and business  managers.&lt;/p&gt;
&lt;p&gt;For the early adopters - the companies embarking on their API journey  - analytics optimize the business of APIs. IT and API metrics like throughput,  availability, latency, errors etc. all help improve your APIs which results in an increased rate in  the growth of your API strategy.&lt;/p&gt;
&lt;p&gt;For the seasoned enterprises, analytics become even more important to  optimize the business of the enterprise. Leveraging business-level  analytics on APIs -- which products are purchased, which are tagged as  favorite, which API resources are most used, etc. -- the enterprises in  which APIs already contribute a high fraction of transactions will also  see an uptick in the rate and relative contribution of API business to  the bottom line.&lt;/p&gt;
&lt;p&gt;Irrespective of the phase or size of your API program, your business will benefit from analytics.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/rEVGO0iyg0Y" height="1" width="1"/&gt;</description>
    <dc:subject>Thoughts on the API Economy API economy, data, analytics, strategy,</dc:subject>
    <dc:date>2012-02-17T06:18:16+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/data_analytics_apis/</feedburner:origLink></item>
  
  <item>
    <title>OAuth: Implementing OAuth 2.0</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/hkAZ4sRa_eY/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/oauth_implementing_oauth_2.0/</guid>
    <description>&lt;p&gt;In a recent &lt;a href="/detail/oauth_is_it_worth_the_effort/"&gt;OAuth post&lt;/a&gt;, we recommended that if your API can require HTTPS, use OAuth 2.0.&amp;nbsp; Otherwise, use OAuth 1.0a.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How should you use OAuth 2.0?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are three types of credentials in OAuth 2.0.&lt;br /&gt; &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;BEARER TOKEN&lt;/strong&gt;: This type requires SSL. A bearer token is a big random number. Bearer tokens are easier for developers than OAuth 1.0a because they don&amp;rsquo;t have to write the signature. This is the most straightforward of the credential types to implement.&amp;nbsp; &lt;strong&gt;Use it!&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;MAC TOKEN:&lt;/strong&gt; Like OAuth 1.0a, uses signature instead of SSL. The spec is still changing&lt;strong&gt; &lt;/strong&gt;so I recommend that you wait.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;SAML&lt;/strong&gt;: Makes sense if the API Team and the developers really want SAML. The OAuth standards team is working on ways to use OAuth with SAML but that option is still changing. I recommend that you wait to implement SAML.&lt;/p&gt;
&lt;p&gt;In short, I recommend that you use &lt;strong&gt;bearer tokens&lt;/strong&gt;, as it is the simplest to implement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;How many legs?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I often get this question &amp;ndash; how many legs does OAuth have and how many legs should I use?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look at the 3-legged and 2-legged terminology that&amp;rsquo;s developed around OAuth.&lt;/p&gt;
&lt;p&gt;&lt;img height="225" src="/images/uploads/OAuth_3-leg_race.png" width="325" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3-legged OAuth&lt;/strong&gt; refers to the fact that there are three entities - a user, a client (application), and a server (service) involved. Both the user and the app have credentials.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2-legged OAuth&lt;/strong&gt; refers to the case where the OAuth signature method is being used to identify just the application &amp;ndash; that is, to identify just the client and not the user. This is often done using SSL. But the OAuth 1.0 signature can be used.&lt;/p&gt;
&lt;p&gt;In my opinion, 2-legged OAuth uses only a part of OAuth and &lt;strong&gt;3-legged OAuth&lt;/strong&gt; is really &lt;strong&gt;OAuth&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If your API needs to authenticate users, you should use 3-legged OAuth. It has &lt;a href="/detail/oauth_why_its_good_for_api_providers/"&gt;benefits for the API Providers&lt;/a&gt; and above all, it will mean improved security and better end user and consumer experiences with web and mobile apps.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Would&lt;/em&gt;&lt;em&gt; love to hear your thoughts or questions over on the &lt;a href="https://groups.google.com/group/api-craft"&gt;API Craft&lt;/a&gt; Google groups.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/hkAZ4sRa_eY" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices oauth, api, strategy, security</dc:subject>
    <dc:date>2012-02-16T17:55:54+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/oauth_implementing_oauth_2.0/</feedburner:origLink></item>
  
  <item>
    <title>OAuth: Is it worth the effort?</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/LiukOK1jOrs/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/oauth_is_it_worth_the_effort/</guid>
    <description>&lt;p&gt;In the &lt;a href="/detail/oauth_why_its_good_for_api_providers/"&gt;previous few blog posts&lt;/a&gt;, I&lt;a href="/taglist/OAuth"&gt;&lt;/a&gt;&amp;rsquo;ve talked about what OAuth is and when and why I recommend it.&lt;/p&gt;
&lt;p&gt;This time, let's explore some of the reasons why OAuth is more cumbersome and complicated for developers than plain passwords as well as some recommendations to help you make the decision between OAuth 2.0 or 1.0a.&lt;/p&gt;
&lt;p&gt;Because OAuth eliminates password sharing between web apps, and password storage on mobile devices, and importantly for the sake of your end-users&amp;rsquo; experience and security, I believe it is worth the effort.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How many versions of OAuth and which one should you use?&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;OAuth 1.0&lt;/strong&gt; The first "production" version of OAuth 1.0 didn't actually do authentication delegation correctly and as a result, the spec itself had to be patched. &lt;strong&gt;No one should be using OAuth 1.0 now.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;OAuth 1.0a&lt;/strong&gt; Not an IETF standard but stable and well understood.&lt;br /&gt;Uses a signature to exchange credentials between client and server. This means that you get API security without SSL (not only is the password never exchanged but the OAuth token is never exchanged &amp;ndash; it&amp;rsquo;s encrypted inside the signature). But coding the signature right is tricky.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;OAuth 2.0&lt;/strong&gt; Actively under development in the IETF.&lt;br /&gt;It is getting more stable and changes less with each draft &amp;ndash; core flows are unlikely to change. Supports a &amp;lsquo;bearer token&amp;rsquo;, which is easier to code than the signature but requires SSL. However, most APIs should be using SSL by default anyway. Optional specs support signatures, SAML, and so on, but those specs are not yet stable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The authentication dance is painful&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are a lot of  great sites where you can get the details of the OAuth 1.0a  authentication flow chart, so I'm not going to tackle that here. It&amp;rsquo;s  not simple. It gets a little simpler with bearer tokens in OAuth 2.0 but  because of the security requirements and the fact that you have to  exchange identity without a password, it's always going to be a little  complex.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Signatures are painful&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The good news is that in OAuth 2.0 signatures are optional. You can do SSL and use a bearer token.&lt;/p&gt;
&lt;p&gt;As I mentioned above, getting the OAuth 1.0a signature algorithm right is difficult. If you&amp;rsquo;re going to use OAuth 1.0a, I recommend you use one of the many libraries that are available.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where do you store the credentials on the client?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is no magic. You have an OAuth token and secret that needs to be on your mobile device and accessible.&lt;/p&gt;
&lt;p&gt;You could encrypt it, but then you need access to the key that decrypts it.&amp;nbsp; You could also break them into smaller pieces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What should you do?&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Be patient. If your API can  require HTTPS, use OAuth 2.0 with bearer tokens. (Use the latest draft  of 2.0.) Otherwise, use OAuth 1.0a.&lt;/p&gt;
&lt;p&gt;It's possible to build  an effective API right now using either a current draft of OAuth 2.0  (see Facebook) or OAuth 1.0a (see Twitter).&lt;/p&gt;
&lt;p&gt;Bottom line, with your end-users&amp;rsquo; experience and security top-of-mind, I believe OAuth is worth the effort.&lt;/p&gt;
&lt;p&gt;Next time: &lt;a href="/detail/oauth_implementing_oauth_2.0/"&gt;&lt;strong&gt;Implementing&lt;/strong&gt;&lt;strong&gt; OAuth 2.0&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/LiukOK1jOrs" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices oauth, api, strategy, security</dc:subject>
    <dc:date>2012-02-15T19:00:30+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/oauth_is_it_worth_the_effort/</feedburner:origLink></item>
  
  <item>
    <title>The Anatomy of Apps</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/_L0DHFhJQ9U/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/the_anatomy_of_apps/</guid>
    <description>&lt;p&gt;Thanks to all who participated in last week's strategy webinar:&lt;strong&gt; &lt;br /&gt;The Anatomy of Apps&lt;/strong&gt;&lt;em&gt;&lt;strong&gt; - How iPhone, Android &amp;amp; Facebook Apps Consume APIs&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Thanks to our speakers &lt;a href="https://twitter.com/edanuff"&gt;@edanuff&lt;/a&gt;, &lt;a href="https://twitter.com/#%21/landlessness"&gt;@landlessness &lt;/a&gt;and&amp;nbsp;&lt;a href="https://twitter.com/#!/landlessness"&gt;&lt;/a&gt;&lt;a href="https://twitter.com/sramji"&gt;@sramji&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are the slides and video. We'd love more of your thoughts, insights, or questions on the&amp;nbsp;&lt;a href="http://groups.google.com/group/api-craft/"&gt;api-craft forum&lt;/a&gt;.&amp;nbsp; Or tune in to the new IRC channel&lt;strong&gt; #api-craft&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="355" src="http://www.youtube.com/embed/uI4d9DHMrvE" width="425"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;div id="__ss_11518580" style="width: 425px;"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/apigee/the-anatomy-of-apps-how-iphone-android-facebook-apps-consume-apis" title="The Anatomy of Apps - How iPhone, Android &amp;amp; Facebook Apps Consume APIs" target="_blank"&gt;The Anatomy of Apps - How iPhone, Android &amp;amp; Facebook Apps Consume APIs&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/11518580?rel=0" width="425"&gt;&lt;/iframe&gt;
&lt;div style="padding:5px 0 12px"&gt;View more presentations from &lt;a href="http://www.slideshare.net/apigee" target="_blank"&gt;Apigee&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/_L0DHFhJQ9U" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices API design, developers, applications, iPhone app, Android app, Facebook app, webinar</dc:subject>
    <dc:date>2012-02-14T22:07:16+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/the_anatomy_of_apps/</feedburner:origLink></item>
  
  <item>
    <title>OAuth: For server-to-server APIs?</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/K1o9MIKm87w/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/oauth_for_server-to-server_apis/</guid>
    <description>&lt;p&gt;In my last post, &lt;a href="/detail/oauth_why_its_good_for_api_providers/"&gt;OAuth: Why it's good for API providers&lt;/a&gt;, I talked about why I recommend OAuth for API providers when they are exposing APIs for web or mobile apps.&lt;/p&gt;
&lt;p&gt;This time, a short follow up to look at a couple of scenarios in which OAuth might not be the best solution&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;APIs designed to be used only by servers.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When the only clients of your API are servers, OAuth is not the best solution. Having a separate set of authentication credentials for each app is a nice feature of OAuth, but for server-to-server use, the need to log in securely using a browser gets in the way.&lt;/p&gt;
&lt;p&gt;Simply assigning &lt;strong&gt;a unique password&lt;/strong&gt; to each app is probably sufficient. &lt;strong&gt;Two-way SSL&lt;/strong&gt; is another good, albeit cumbersome approach.&lt;/p&gt;
&lt;p&gt;I believe that OAuth is unnecessary for APIs that are used by a small number of internal or partner systems, and which are used by servers and not by end users who have passwords.&lt;/p&gt;
&lt;p&gt;However, think ahead! If you discover that those APIs that are only accessed by servers today are useful by other types of clients (like web or mobile) tomorrow, then you'll need to support &lt;a href="/detail/oauth_the_valet_key_metaphor/"&gt;OAuth&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are there other scenarios for which OAuth is unnecessary or even a bad idea?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just like the server-to-server scenario, I think that OAuth doesn&amp;rsquo;t make sense in the following scenarios:&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Anything that requires commercial levels of trust. For example, when your security model requires the capabilities of a PKI infrastructure.&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One-time tokens. OAuth is a lot of complexity and machinery to make one API call.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;B&lt;/strong&gt;&lt;strong&gt;ad ideas &lt;/strong&gt;include&lt;strong&gt; &lt;/strong&gt;creating your own &amp;lsquo;version&amp;rsquo; of OAuth or creating something that&amp;rsquo;s like OAuth but different. Sticking with standards, and focusing your development efforts on   creating great apps seems like a better idea than rolling your own   security scheme.&lt;/p&gt;
&lt;p&gt;Next time: We'll talk about some OAuth complexities, and &lt;a href="/detail/oauth_is_it_worth_the_effort/"&gt;why it's worth the effort&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/K1o9MIKm87w" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices oauth, api, strategy, security</dc:subject>
    <dc:date>2012-02-13T22:35:07+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/oauth_for_server-to-server_apis/</feedburner:origLink></item>
  
  <item>
    <title>OAuth: Why it’s good for API providers</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/_f3VL7LGf34/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/oauth_why_its_good_for_api_providers/</guid>
    <description>&lt;p&gt;In &lt;a href="/detail/oauth_the_valet_key_metaphor/"&gt;OAuth: The valey key metaphor&lt;/a&gt; and &lt;a href="/detail/oauth_flow_for_mobile_apps/"&gt;OAuth: Flow for mobile apps&lt;/a&gt;, we talked about why OAuth is good for users - how it allows users to grant third-parties access to their web services or mobile apps without sharing their passwords.&lt;/p&gt;
&lt;p&gt;This time, why OAuth is good for API providers whether they are exposing APIs for web apps or APIs designed for mobile apps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OAuth means that &lt;/strong&gt;&lt;strong&gt;Web apps that expose APIs don&amp;rsquo;t have to share passwords.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are two alternatives&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The security risk of typing your password into every single web app you use &amp;ndash; an unacceptable risk!&lt;/p&gt;
&lt;p&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Some sort of universal single sign-on mechanism (run by a third party that everyone agrees upon and trusts) &amp;ndash; it doesn&amp;rsquo;t exist!&lt;/p&gt;
&lt;p&gt;Therefore, for all &lt;strong&gt;web apps that expose APIs to other web apps&lt;/strong&gt; - we recommend &lt;strong&gt;OAuth&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;OAuth eliminates the need to store a password on a mobile device adding a layer of security when an API is used by mobile apps built by untrusted developers for a public API.&lt;/p&gt;
&lt;p&gt;An OAuth token is hard to guess. It is tied to a particular app and device. It can be revoked without affecting other devices and apps.&lt;/p&gt;
&lt;p&gt;OAuth allows the API provider to revoke tokens for an individual user, for an entire app, without requiring the user to change their original password. This is critical if a mobile device is compromised or if a rogue app is discovered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OAuth &lt;em&gt;future proofs&lt;/em&gt; the authentication process. &lt;/strong&gt;Because users&amp;rsquo; browsers are redirected to a place that&amp;rsquo;s under the control of the API team to get the OAuth token, the API team can control what to do at that point in the workflow.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In other words, OAuth is flexible enough to support any of your company&amp;rsquo;s specific workflows (think SSL, multi-factor authentication, terms of service, changes to terms of service, and so on&amp;hellip;) without requiring a change to the client or server.&lt;/p&gt;
&lt;p&gt;Therefore, for &lt;strong&gt;APIs designed for mobile and native apps &lt;/strong&gt;&amp;ndash; we recommend &lt;strong&gt;OAuth&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Next time: &lt;a href="/detail/oauth_for_server-to-server_apis/"&gt;OAuth in a server-to-server API scenario&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/_f3VL7LGf34" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices oauth, api, strategy, security</dc:subject>
    <dc:date>2012-02-08T21:51:17+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/oauth_why_its_good_for_api_providers/</feedburner:origLink></item>
  
  <item>
    <title>APIs We Love: DonorsChoose.org’s New API Console</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/gikL6zfZtO8/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/donorschoose_api_console/</guid>
    <description>&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;APIs We Love: DonorsChoose.org&amp;rsquo;s New API Console&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;Today there are thousands of APIs doing amazing things - revolutionizing personal data, exposing powerful cloud services, and transforming the way businesses work. We particularly love APIs that make the world a better place - like the API for DonorsChoose.org, an online charity that makes it easy for anyone to help students and classroom projects in need. We're excited to announce that you can learn, explore and test the DonorsChoose.org API on our Providers Page (now with over 40 APIs!) or in the DonorsChoose.org developer guide. DonorsChoose.org uses Apigee To Go to embed the API Console in their site.&amp;nbsp;&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;[Screenshot, attached]&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;The DonorsChoose.org API lets developers help classrooms right from their websites or apps. It has been used by Chevron, SONIC Drive-In, NBC Universal, Starbucks and others to build customized cause marketing and community engagement. Now you can use the Apigee API Console to get started quickly, exploring project listings and integrating donation functionality right into your apps.&amp;nbsp;&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;&lt;/div&gt;
&lt;div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;Tell us your app plans, send feedback and let us know additional API Consoles you'd like to see - email us at console@apigee.com&amp;nbsp;&lt;/div&gt;
&lt;p&gt;Today there are thousands of APIs doing amazing things - revolutionizing personal data, exposing powerful cloud services, and transforming the way businesses work. We particularly love APIs that make the world a better place - like the API for &lt;a href="http://www.donorschoose.org/"&gt;DonorsChoose.org&lt;/a&gt;, an online charity that makes it easy for anyone to help students and classroom projects in need. We're excited to announce that you can learn, explore and test the DonorsChoose.org API on our &lt;a href="http://apigee.com/providers"&gt;Providers Page&lt;/a&gt; (now with over 40 APIs!) or in the &lt;a href="http://developer.donorschoose.org/documentation/console"&gt;DonorsChoose.org developer guide&lt;/a&gt;. DonorsChoose.org uses &lt;a href="http://apigee.com/about/products_togo.html"&gt;Apigee To-Go&lt;/a&gt; to embed the API Console in their site.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://developer.donorschoose.org/documentation/console"&gt;&lt;img src="http://i849.photobucket.com/albums/ab51/apigee/ScreenShot2012-02-08at123838PM.png" style="vertical-align: middle; border: 1px solid black;" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The DonorsChoose.org API lets developers help classrooms right from their websites or apps. It has been used by Chevron, SONIC Drive-In, NBC Universal, Starbucks and others to build customized cause marketing and community engagement. Now you can use the Apigee API Console to get started quickly, exploring project listings and integrating donation functionality right into your apps.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tell us your app plans, send feedback and let us know additional API Consoles you'd like to see - email us at &lt;a href="mailto:console@apigee.com"&gt;console@apigee.com&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/gikL6zfZtO8" height="1" width="1"/&gt;</description>
    <dc:subject>News api consoles, apigee to go</dc:subject>
    <dc:date>2012-02-08T19:35:44+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/donorschoose_api_console/</feedburner:origLink></item>
  
  <item>
    <title>OAuth: Flow for mobile apps</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/2VfgRn9HC2I/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/oauth_flow_for_mobile_apps/</guid>
    <description>&lt;p&gt;In my&lt;a href="/detail/oauth_the_valet_key_metaphor/"&gt; previous post&lt;/a&gt;, I talked about how OAuth allows users to grant third-parties access to their web services without sharing their passwords.&lt;/p&gt;
&lt;p&gt;In that previous example, our user (Bob) accessed his Twitter account through the bit.ly web site.&lt;/p&gt;
&lt;p&gt;This time, &lt;strong&gt;let's look at what happens when Bob is using a mobile app instead of a web app.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="250" src="/images/uploads/OAuth_mobile_flow.png" style="border: 1px solid black;" width="400" /&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s pretty much the same for a mobile app as a web app. When you fire up your mobile app and want   to access Twitter, you don&amp;rsquo;t want to have to give the mobile app your Twitter password and store it on your phone.&lt;/p&gt;
&lt;p&gt;In the same way as happens for the web app,&amp;nbsp; the  phone app opens a  browser window and directs Bob to login to  Twitter (and authorize  bit.ly to use his Twitter account) - using OAuth.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The phone app never sees Bob&amp;rsquo;s Twitter password.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The phone app uses its OAuth credentials to retrieve credentials for Bob. It stores these locally. In this way,&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OAuth allows this &lt;em&gt;one&lt;/em&gt; phone app access to the Twitter service on behalf of &lt;em&gt;one&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; user (Bob).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This all happens through your browser. There are both advantages and disadvantages to this:&lt;/p&gt;
&lt;p&gt;- The advantage of this is that the &lt;strong&gt;app never sees your password&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;You don&amp;rsquo;t have to &lt;strong&gt;trust the person that built the app&lt;/strong&gt; or &lt;strong&gt;worry about losing your phone&lt;/strong&gt; (as much).&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;If Bob loses his phone, he can &lt;strong&gt;log into Twitter and revoke the credentials that Twitter gave the phone app&lt;/strong&gt;. (A thief cannot uncover the password, only the token.)&lt;/p&gt;
&lt;p&gt;- The disadvantage is that &lt;strong&gt;the app has to open up a browser window&lt;/strong&gt;. This possibly breaks the flow of a nicely designed UI for a mobile app.&lt;/p&gt;
&lt;p&gt;There are ways in OAuth around this but you eliminate many of the  security reasons for OAuth in doing so. Twitter and Facebook for  example, have made the choice to have everybody log in through the  browser.&lt;/p&gt;
&lt;p&gt;Next time: &lt;a href="/detail/oauth_why_its_good_for_api_providers/"&gt;Why OAuth is good for API providers&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/2VfgRn9HC2I" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices oauth, api, strategy, security</dc:subject>
    <dc:date>2012-02-08T18:34:44+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/oauth_flow_for_mobile_apps/</feedburner:origLink></item>
  
  <item>
    <title>Armrest &amp;amp; REST API Design</title>
    <link>http://feeds.apigee.com/~r/ApigeeBlog/~3/ObAZNb5SNQk/</link>
    <guid isPermaLink="false">http://blog.apigee.com/detail/armrest_rest_api_design/</guid>
    <description>&lt;p&gt;Last week I flew from Doha, Qatar to Brussels, Belgium. The fella in the aisle seat fell asleep before takeoff. The road warrior code of chivalry indicates one should never wake a fellow traveler.&lt;/p&gt;
&lt;p&gt;So I stayed in my window seat for 8 hours. After a few minutes it became obvious that my armrest (singular, my neighbor had usurped the other one) was uncomfortable.&lt;/p&gt;
&lt;p&gt;Here's a picture of the armrest.&lt;br /&gt; &lt;br /&gt; &lt;img height="256" src="/images/uploads/arm_rest.jpeg" width="450" /&gt;&lt;br /&gt; &lt;strong&gt;&lt;br /&gt; The armrest has many problems. The biggest: you can't rest your arm on it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you try to relax, your elbow gets sucked by gravity into the cutout and pinched unpleasantly by hard plastic. If you deal with the pain and fall asleep you will wake to find your ears exploding because you inadvertently cranked up the volume, the flight attendant will be tapping your shoulder asking why you paged him and your reading light will be shining in your dilated eyes.&lt;/p&gt;
&lt;p&gt;The Airbus A330-200 in which I was traveling holds 250 people. That's 2,000 man hours of discomfort per flight injected into the universe because of bad design.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So, why does such an obviously bad, pain-inflicting design make it into the world?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Because it cost-effectively solves other, non-customer-related problems! In this case, it is a clever way to store the remote controller while still keeping it accessible to passengers. It&amp;rsquo;s also done in a way that doesn't require an expensive reworking of the interior: cut off part of the armrest, put a hole in it and reattach on a hinge. Done! In-air multimedia problem solved!&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What does this have to do with REST APIs?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Even with the best of intentions, API teams often stop short of doing the right things for their customers. Customers of APIs are application developers. Application developers are smart, busy, and born to suffer (especially Objective-C developers, &lt;code&gt;NSThatsADifferentTopic&lt;/code&gt;). But they are also often musicians, gamers and aesthetes. They are attracted to things like truth and beauty. And they are attracted to good, self-consistent API design.&lt;/p&gt;
&lt;p&gt;So, why do API teams often stop short of delighting developers? Because the time and cost of learning to do the right things and getting them done often seems prohibitive!&amp;nbsp;At Apigee, we share everything we learn on our &lt;a href="/"&gt;blog&lt;/a&gt;, twitter &lt;a href="https://twitter.com/#!/apigee"&gt;@Apigee&lt;/a&gt;, &lt;a href="http://www.youtube.com/apigee"&gt;YouTube&lt;/a&gt;, &lt;a href="http://groups.google.com/group/api-craft/"&gt;API Craft &lt;/a&gt;on Google Group, and in our &lt;a href="/taglist/webinar"&gt;webinars&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt; There's no reason to walk the road to creating a fantastic API alone. If you know of an API or an API team that's not doing things right or is trying to go it alone, please send them to us. We'll get them straightened out.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ApigeeBlog/~4/ObAZNb5SNQk" height="1" width="1"/&gt;</description>
    <dc:subject>API Tech and Best Practices API, design, REST,</dc:subject>
    <dc:date>2012-02-07T16:44:06+00:00</dc:date>
  <feedburner:origLink>http://blog.apigee.com/detail/armrest_rest_api_design/</feedburner:origLink></item>
  

</channel>
</rss>

