<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: rfc</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/rfc.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2024-10-14T05:22:15+00:00</updated><author><name>Simon Willison</name></author><entry><title>Grant Negotiation and Authorization Protocol (GNAP)</title><link href="https://simonwillison.net/2024/Oct/14/grant-negotiation-and-authorization-protocol-gnap/#atom-tag" rel="alternate"/><published>2024-10-14T05:22:15+00:00</published><updated>2024-10-14T05:22:15+00:00</updated><id>https://simonwillison.net/2024/Oct/14/grant-negotiation-and-authorization-protocol-gnap/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9635"&gt;Grant Negotiation and Authorization Protocol (GNAP)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
RFC 9635 was published a few days ago. GNAP is effectively OAuth 3 - it's a newly standardized design for a protocol for delegating authorization so an application can access data on your behalf.&lt;/p&gt;
&lt;p&gt;The most interesting difference between GNAP and OAuth 2 is that GNAP no longer requires clients to be registered in advance. With OAuth the &lt;code&gt;client_id&lt;/code&gt; and &lt;code&gt;client_secret&lt;/code&gt; need to be configured for each application, which means applications need to register with their targets - creating a new application on GitHub or Twitter before implementing the authorization flow, for example.&lt;/p&gt;
&lt;p&gt;With GNAP that's no longer necessary. The protocol allows a client to provide a key as part of the first request to the server which is then used in later stages of the interaction.&lt;/p&gt;
&lt;p&gt;GNAP has been brewing for a &lt;em&gt;long&lt;/em&gt; time. The IETF working group &lt;a href="https://datatracker.ietf.org/doc/charter-ietf-gnap/"&gt;was chartered in 2020&lt;/a&gt;, and two of the example implementations (&lt;a href="https://github.com/interop-alliance/gnap-client-js"&gt;gnap-client-js&lt;/a&gt; and &lt;a href="https://github.com/securekey/oauth-xyz-nodejs"&gt;oauth-xyz-nodejs&lt;/a&gt;) last saw commits more than four years ago.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/e1gujd/rfc_9635_grant_negotiation"&gt;lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/oauth"&gt;oauth&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;&lt;/p&gt;



</summary><category term="oauth"/><category term="rfc"/><category term="security"/></entry><entry><title>RFC 7807: Problem Details for HTTP APIs</title><link href="https://simonwillison.net/2022/Nov/1/rfc-7807/#atom-tag" rel="alternate"/><published>2022-11-01T03:15:05+00:00</published><updated>2022-11-01T03:15:05+00:00</updated><id>https://simonwillison.net/2022/Nov/1/rfc-7807/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://datatracker.ietf.org/doc/draft-ietf-httpapi-rfc7807bis/"&gt;RFC 7807: Problem Details for HTTP APIs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This RFC has been brewing for quite a while, and is currently in last call (ends 2022-11-03). I’m designing the JSON error messages for Datasette at the moment so this could not be more relevant for me.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://blog.frankel.ch/structured-errors-http-apis/"&gt;Nicolas Fränkel&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/errors"&gt;errors&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mark-nottingham"&gt;mark-nottingham&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/standards"&gt;standards&lt;/a&gt;&lt;/p&gt;



</summary><category term="errors"/><category term="http"/><category term="json"/><category term="mark-nottingham"/><category term="rfc"/><category term="standards"/></entry><entry><title>How to Read an RFC</title><link href="https://simonwillison.net/2018/Aug/6/how-read-rfc/#atom-tag" rel="alternate"/><published>2018-08-06T22:38:21+00:00</published><updated>2018-08-06T22:38:21+00:00</updated><id>https://simonwillison.net/2018/Aug/6/how-read-rfc/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.mnot.net/blog/2018/07/31/read_rfc"&gt;How to Read an RFC&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
An extremely useful guide to reading RFCs by Mark Nottingham. I didn’t know most of the stuff in here.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mark-nottingham"&gt;mark-nottingham&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;&lt;/p&gt;



</summary><category term="mark-nottingham"/><category term="rfc"/></entry><entry><title>RFC5785: Defining Well-Known Uniform Resource Identifiers</title><link href="https://simonwillison.net/2010/Apr/11/rfc/#atom-tag" rel="alternate"/><published>2010-04-11T19:32:28+00:00</published><updated>2010-04-11T19:32:28+00:00</updated><id>https://simonwillison.net/2010/Apr/11/rfc/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.rfc-editor.org/rfc/rfc5785.txt"&gt;RFC5785: Defining Well-Known Uniform Resource Identifiers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Sounds like a very good idea to me: defining a common prefix of /.well-known/ for well-known URLs (common metadata like robots.txt) and establishing a registry for all such files. OAuth, OpenID and other decentralised identity systems can all benefit from this.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.mnot.net/blog/2010/04/07/well-known"&gt;Mark Nottingham&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/oauth"&gt;oauth&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openid"&gt;openid&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/robots-txt"&gt;robots-txt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/urls"&gt;urls&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wellknownurls"&gt;wellknownurls&lt;/a&gt;&lt;/p&gt;



</summary><category term="oauth"/><category term="openid"/><category term="rfc"/><category term="robots-txt"/><category term="urls"/><category term="wellknownurls"/></entry><entry><title>Quoting James Snell</title><link href="https://simonwillison.net/2007/Nov/18/snellspace/#atom-tag" rel="alternate"/><published>2007-11-18T00:15:22+00:00</published><updated>2007-11-18T00:15:22+00:00</updated><id>https://simonwillison.net/2007/Nov/18/snellspace/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://snellspace.com/wp/?p=803"&gt;&lt;p&gt;I think it is well established that HTTP Authentication needs a major kick in the ass and OpenID and OAuth may get us most of the way there.  However, until I see RFC#s attached to both I'm hardly going to consider them to be complete. I propose the creation of an IETF WG on Identity and Authentication. The WG would be chartered to produce two RFCs covering each of the two areas. OpenID and OAuth could be used to seed the WG effort.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://snellspace.com/wp/?p=803"&gt;James Snell&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ietf"&gt;ietf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/james-snell"&gt;james-snell&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/oauth"&gt;oauth&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openid"&gt;openid&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/standardisation"&gt;standardisation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/standards"&gt;standards&lt;/a&gt;&lt;/p&gt;



</summary><category term="http"/><category term="ietf"/><category term="james-snell"/><category term="oauth"/><category term="openid"/><category term="rfc"/><category term="standardisation"/><category term="standards"/></entry><entry><title>RFC 5023: The Atom Publishing Protocol</title><link href="https://simonwillison.net/2007/Oct/9/atom/#atom-tag" rel="alternate"/><published>2007-10-09T10:17:52+00:00</published><updated>2007-10-09T10:17:52+00:00</updated><id>https://simonwillison.net/2007/Oct/9/atom/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.rfc-editor.org/rfc/rfc5023.txt"&gt;RFC 5023: The Atom Publishing Protocol&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
It’s done!


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/atom"&gt;atom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/atompub"&gt;atompub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;&lt;/p&gt;



</summary><category term="atom"/><category term="atompub"/><category term="rfc"/></entry><entry><title>Proposed RFC for application/json</title><link href="https://simonwillison.net/2006/Aug/1/proposed/#atom-tag" rel="alternate"/><published>2006-08-01T21:29:17+00:00</published><updated>2006-08-01T21:29:17+00:00</updated><id>https://simonwillison.net/2006/Aug/1/proposed/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.ietf.org/rfc/rfc4627.txt?number=4627"&gt;Proposed RFC for application/json&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Douglas Crockford is putting JSON through the IETF.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.davidflanagan.com/blog/2006_08.html"&gt;davidflanagan.com&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/douglas-crockford"&gt;douglas-crockford&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ietf"&gt;ietf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;&lt;/p&gt;



</summary><category term="douglas-crockford"/><category term="ietf"/><category term="json"/><category term="rfc"/></entry><entry><title>Fighting RFCs with RFCs</title><link href="https://simonwillison.net/2005/May/6/bad/#atom-tag" rel="alternate"/><published>2005-05-06T20:39:45+00:00</published><updated>2005-05-06T20:39:45+00:00</updated><id>https://simonwillison.net/2005/May/6/bad/#atom-tag</id><summary type="html">
    &lt;p id="p-0"&gt;Google's recently released &lt;a href="http://webaccelerator.google.com/"&gt;Web Accelerator&lt;/a&gt; apparently has some &lt;a href="http://www.37signals.com/svn/archives2/google_web_accelerator_hey_not_so_fast_an_alert_for_web_app_designers.php" title="Google Web Accelerator: Hey, not so fast - an alert for web app designers"&gt;scary side-effects&lt;/a&gt;. It's been spotted pre-loading links in password-protected applications, which can amount to clicking on every "delete this" link  -  bypassing even the JavaScript prompt you carefully added to give people the chance to think twice.&lt;/p&gt;

&lt;p id="p-1"&gt;"Aah," I hear you cry, "but &lt;a href="http://www.ietf.org/rfc/rfc2616.txt" title="Hypertext Transfer Protocol -- HTTP/1.1"&gt;RFC 2616&lt;/a&gt; clearly states that you shouldn't perform state changing operations with a GET or HEAD method!"&lt;/p&gt;

&lt;blockquote cite="http://www.ietf.org/rfc/rfc2616.txt"&gt;&lt;p id="p-2"&gt;In particular, the convention has been established that the GET and
   HEAD methods SHOULD NOT have the significance of taking an action
   other than retrieval.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p id="p-3"&gt;I'll see your RFC 2616 and raise you an &lt;a href="http://www.ietf.org/rfc/rfc2119.txt"&gt;RFC 2119&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite="http://www.ietf.org/rfc/rfc2119.txt"&gt;&lt;p id="p-4"&gt;
SHOULD NOT   This phrase, or the phrase "NOT RECOMMENDED" mean that
   there may exist valid reasons in particular circumstances when the
   particular behavior is acceptable or even useful, but the full
   implications should be understood and the case carefully weighed
   before implementing any behavior described with this label.
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p id="p-5"&gt;Hiding your dangerous delete links behind an authentication scheme is a perfectly acceptable compromise. Web Accelerator is &lt;a href="http://www.tbray.org/ongoing/When/200x/2002/09/10/Good%20Technology" title="Broken As Designed"&gt;B.A.D&lt;/a&gt;.&lt;/p&gt;

&lt;p id="p-6"&gt;&lt;strong&gt;Update:&lt;/strong&gt; Be sure to read the &lt;a href="/2005/May/06/badcomments/"&gt;excellent discussion&lt;/a&gt; brewing in the comments. Hiding behind authentication may not be as acceptable a compromise as I had first thought.&lt;/p&gt;

&lt;p id="p-7"&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; If you haven't been following the comments, I've had a change of heart. Even in the absence of Web Accelerator, hiding behind authentication leaves your application open to some very nasty security vulnerabilities (malicious pages can piggy-back your session and cause havoc making dangerous GET calls). I still think the RFC language covers people who thought long and hard before implementing a dangerous GET, but if you haven't thought about security and accelerating caching proxies such as Web Accelerator you haven't been thinking hard enough.&lt;/p&gt;

&lt;p id="p-8"&gt;&lt;strong&gt;Update 3:&lt;/strong&gt; So, it turns out using POST is no defence at all against &lt;a href="http://www.squarefree.com/securitytips/web-developers.html#CSRF"&gt;CSRF&lt;/a&gt; attacks. I've been learning a whole bunch of interesting stuff this evening.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/csrf"&gt;csrf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/standards"&gt;standards&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="csrf"/><category term="google"/><category term="http"/><category term="rfc"/><category term="security"/><category term="standards"/></entry><entry><title>RFC 1925: The Twelve Networking Truths</title><link href="https://simonwillison.net/2004/Nov/20/rfc/#atom-tag" rel="alternate"/><published>2004-11-20T21:26:10+00:00</published><updated>2004-11-20T21:26:10+00:00</updated><id>https://simonwillison.net/2004/Nov/20/rfc/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.faqs.org/rfcs/rfc1925.html"&gt;RFC 1925: The Twelve Networking Truths&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“This memo documents the fundamental truths of networking for the Internet community.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;&lt;/p&gt;



</summary><category term="rfc"/></entry><entry><title>RFC 3229: Delta encoding in HTTP</title><link href="https://simonwillison.net/2004/Sep/13/rfc/#atom-tag" rel="alternate"/><published>2004-09-13T23:09:39+00:00</published><updated>2004-09-13T23:09:39+00:00</updated><id>https://simonwillison.net/2004/Sep/13/rfc/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.ietf.org/rfc/rfc3229.txt"&gt;RFC 3229: Delta encoding in HTTP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A solution to the RSS bandwidth problem?

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://bobwyman.pubsub.com/main/2004/09/using_rfc3229_w.html"&gt;As I May Think...: Using RFC3229 with Feeds.&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rfc"&gt;rfc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rss"&gt;rss&lt;/a&gt;&lt;/p&gt;



</summary><category term="http"/><category term="rfc"/><category term="rss"/></entry></feed>