52°F

Aaron Parecki

  • Articles
  • Notes
  • Photos
  • nightpool https://github.com/nightpool   •   Jul 11

    It probably wouldn't be super hard to write a nginx module to enable content negotiation, if there was an interest in it

    On Wed, Jul 11, 2018 at 7:11 PM Aaron Parecki notifications@github.com wrote:

    This would allow a static site to serve ActivityPub objects as well as human-readable HTML. Currently it's not possible to do this, since static sites can't do content negotiation of course.

    โ€” You are receiving this because you commented.

    Reply to this email directly, view it on GitHub https://github.com/w3c/activitypub/issues/310#issuecomment-404338732, or mute the thread https://github.com/notifications/unsubscribe-auth/AAORV8zh504acM1VU-qjYTFjpKw1xwpDks5uFoYjgaJpZM4UdtrM .

    Aaron Parecki
    People who want to host static sites typically are not the same people who are going to custom-compile their nginx in order to install a content negotiation module.

    The two very popular use cases that don't work when content negotiation is required are:

    1) hosting a site on GitHub Pages, Netlify, Amazon S3, etc

    2) using a caching CDN like CloudFlare

    It would be really sad to completely exclude these very popular services from participating in the ActivityPub network.

    Even Mastodon supports alternate URLs for their ActivityPub representations of pages, e.g. https://mastodon.social/@Gargron vs https://mastodon.social/@Gargron.json so it seems like it wouldn't be a huge stretch to have it advertise those URLs on the HTML pages.
    Portland, Oregon, USA • 88°F
    Wed, Jul 11, 2018 5:07pm -07:00
  • https://github.com/w3c/activitypub

    Specify public key format

    Currently, Mastodon and Pleroma are publishing public keys on profiles in different formats. I discovered this when I tried to load a Pleroma public key using PHP's built-in openssl, and it failed.
    continue reading...
    Wed, Jul 11, 2018 4:15pm -07:00
  • riking https://github.com/riking   •   Jun 7

    #310 Standardize discovery using link rel on user-visible URLs

    Aaron Parecki
    This would allow a static site to serve ActivityPub objects as well as human-readable HTML. Currently it's not possible to do this, since static sites can't do content negotiation of course.
    Portland, Oregon, USA • 86°F
    Wed, Jul 11, 2018 4:11pm -07:00
  • EdwardHinkle https://github.com/EdwardHinkle   •   Jul 11

    @aaronpk @cleverdevil I'm not sure that adding native support in Indigenous for IndiePaper is the right step now. With https://github.com/cleverdevil/Indiepaper-macOS/pull/3 and the fact that every url in Indigenous allows you to open a ShareSheet, it doesn't make as much sense to me to bundle IndiePaper when IndiePaper (and other future services) can just have their own app in the Share Sheet.

    Any thoughts for or against that train of thinking?

    I think the only real outcome of this item would be being able to select a channel to have offline caching of posts.

    Aaron Parecki
    I like the idea of just relying on the share sheet. Less hardcoding of apps!
    Portland, Oregon • 61°F
    Wed, Jul 11, 2018 8:04am -07:00
  • avi https://micro.blog/avi   •   Jul 11

    @aaronpk can confirm. But itโ€™s OK โ€” itโ€™s fun!

    Aaron Parecki
    I try to have fun where I can ๐Ÿ˜
    Portland, Oregon • 59°F
    Wed, Jul 11, 2018 7:22am -07:00
  • Zack https://toot.cafe/@zack   •   Jul 11

    @aaronpk ok done

    Aaron Parecki
    Thanks... found one issue and uncovered another. My site was failing to fetch your public key because Mastodon and Pleroma support slightly different content negotiation headers. Now it's failing because Pleroma public keys are PKCS#1 RSA, and Mastodon are X.509. Yay standards.
    Portland, Oregon • 59°F
    Wed, Jul 11, 2018 7:00am -07:00
  • Zack https://toot.cafe/@zack   •   Jul 11

    @aaronpk Cool! Thanks for checking.

    @0x1C3B00DA

    Aaron Parecki
    I think this might be a silly bug on my end. It looks like the follow request was never completed. I just reset that, can you send me a follow again?
    Portland, Oregon • 59°F
    1 reply
    Wed, Jul 11, 2018 6:46am -07:00
  • Zack https://toot.cafe/@zack   •   Jul 11

    @aaronpk Hey, sorry to reply to a random post, but I don't think your site accepts bare mentions from Mastodon.

    I think there's something funky with your AP implementation and Pleroma. I've been following you for a few days from my pleroma acct, but haven't received any posts from you.

    Aaron Parecki
    hmm.. well my implementation is very likely Mastodon-specific since it's been hard to find any information about what subset of ActivityPub is actually important to implement, so I've been doing it lazily getting just enough working at a time.

    I forgot about handling bare mentions completely, I'll have to figure out a solution for that.

    What is your Pleroma account? I can check my following logs.
    Portland, Oregon • 58°F
    2 replies
    Wed, Jul 11, 2018 6:36am -07:00
  • Matt Lee https://mat.tl   •   Jul 10
    Iโ€™ll get some actual coins made up.
    Aaron Parecki
    I'll trade you an OAuth token for a Mattlcoin
    Portland, Oregon, USA • 73°F
    2 likes
    Tue, Jul 10, 2018 3:33pm -07:00
  • Matt Lee https://mat.tl   •   Jul 10
    And the end of explaining this to me. Iโ€™ll give you a Mattlcoin which is just me promising you dinner and beers in Boston.
    Aaron Parecki
    How do I get a Mattlcoin? I'm going to be in Boston in a few weeks which sounds like an excellent opportunity to cash it in.
    Portland, Oregon, USA • 73°F
    1 like 1 reply
    Tue, Jul 10, 2018 3:24pm -07:00
  • coolaj86 https://github.com/coolaj86   •   Jul 10

    @aaronpk Perhaps I misunderstood and need to read carefully. Perusing https://indieauth.com/ what I got was "This is a reboot of OpenID that requires you to create a webpage and link to it".

    Perhaps that's not at all related to "IndieAuth" that we're talking about here (I didn't read your article yet, but I will now).

    Aaron Parecki

    Yeah sorry for the confusion. I've started the (very slow) process of shutting down indieauth.com because I never should have launched a service with the same name as the spec. That site is not a good representation of the concepts behind IndieAuth.

    Please do check out the blog post, it does a much better job of explaining the actual goals and motivations of the spec.

    Portland, Oregon, USA • 73°F
    Tue, Jul 10, 2018 2:35pm -07:00
  • coolaj86 https://github.com/coolaj86   •   Jul 10

    @jhabdas I wouldn't.

    Total tangent, but here goes...

    All Authentication Sucks

    For years I've been working on a protocol I call OAuth3 (but I'd like to come up with a better name). It's like a peer version of OIDC or a convenient version of IndieAuth.

    However, there have been a number of roadblocks and challenges. Having something work peer-to-peer (decentralized) and be convenient, is neigh unto impossible (but it is possible).

    The problem with all existing auth solutions is that they're in one of two camps: Proprietary/Centralized (OAuth2 implementations) or complicated for a non-technical user OpenID/IndieAuth.

    What Could Succeed

    The way I believe that peer authentication will succeed is by providing a solution that primarily executes on the client device (keypair authentication) but, by default, syncs the public keys to a shared server (with a centralized well-known server as the default), and uses a static page (or 3rd party app if on a phone) - no server APIs required to function - in essentially the way a browser plugin (or native Facebook/Google OAuth on phones) works to manage the exchanges.

    Ultimately, browsers need to adopt such a protocol, but it most be open and compatible between browsers. The same is true for smart phones. Until then, the centralized server would serve as a "broker" to serve the user's preferences to other client-side apps.

    Most importantly, people need to be able to login like they're used to. It must be easier than the current solutions, not more difficult (and how better to make it easier than by removing the most frustrating - and least secure - part of login: passwords).

    What it might look like

    First Login on a Device

    1. I click "Login"
    2. A pop-up to "generic-auth.org" opens up (better branding, but you get the idea)
    3. The user types in their email address (or domain name)
    4. The part after the '@' (if email) is checked for a /.well-known/peer-auth/index.json
      • on 200 OK, redirect to that with ?subject={email} for the next step and save the user's choice
      • on 404 continue using generic-auth.org
    5. I get a push notification on my device (or an email with a "magic link")
      • also, generic-auth.org could link to facebook, twitter, google, etc (though a true peer-auth site could not as that would require having a developer account)
    6. I click the link in email (or the "Allow" option on the push notification) and I'm logged in (or, if using 2FA), I put in a passphrase or totp code
    7. I accept any grants (email address, photo access, etc) as needed
    8. I'm now logged in
      • The static app on generic-auth.com (or my custom auth site) caches that this site is allowed login

    Secondary Login on Device

    1. Behind the scenes the app loads a hidden iframe or postmessage to generic-auth.org
    2. The app is either told to use generic-auth.org, or the peer auth the user supplied before
    3. The app is given a pseudonymous pairwise identifier and short-expiry token without any interaction
    4. The user is simply "logged in" with 0 interaction
    5. The app silently renews the token (completely client-side, no server implementation), as needed
    6. If necessary, a grants dialog appears asking for my email address, photo access, etc

    Logout

    1. When the user clicks "log out" in any web app (or app) that is passed via iframe or postmessage to the client-side and all private keys are deleted.
    2. This means that client-side tokens cannot be renewed (as they were securely generated with client-side private keys)
    3. Likewise an iframe or postmessage is opened for each of the list of sites which have been granted a token, causing their short-lived tokens to expire immediatley
    4. The generic-auth.org server (or the peer auth server) are notified that they may remove "Chrome on Jon's Macbook Pro" (or whatever) and its public keys from the list of authenticated devices.

    Security

    • No cookies, only tokens
    • Client-side token generation
    • Short-lived tokens
    • Optional (but default) sync of public tokens and of grants per app/site
    • Only Facebook has a properly secure login that could feasibly be used on its own as-is
      • Twitter, Google, etc do not support PPIDs and are therefore insecure by default and cannot provide any information that could be used for encryption, etc, as all of the ids are shared among all apps/sites

    But That's not a PERFECT Solution!

    If you're on one side of a chasm and you want to migrate a host of people to the other side, you need a bridge. Something like generic-auth.org (in the hypothetical scenario above) acts as that bridge. The migration would be complete when browsers and phones natively support open-protocol peer-based authentication that doesn't require 3rd party apps to bridge the gap anymore.

    Until that time you have the problem of OpenID/IndieAuth if you go for the "Perfect" peer solution - it requires too much knowledge and effort to intentionally use it. My mom is unlikely to create a website and link it to her other accounts with HTML tags.

    The truly "perfect" solution then is the solution that people who don't care about technology and who don't understand the risks with their current login and authentication setups will adopt out of convenience, and perhaps a sense of individuality or pride, but certainly not for being the most technically correct solution.

    The Catch-22

    Peer-to-Peer can either be convenient for end-users or convenient to develop. It simply can't be both.

    The saving grace is that if it's implemented in JavaScript and used in native apps through a web view, we only need a single implementation for the client-side and only 3 to 5 APIs for the server side (sync public keys, send email / push notifications, sync pairwise grants) - none of which require knowing anything about security or keypair signing and encryption - just opaque files, simple messages, and plain-old JSON.

    Aaron Parecki

    You've basically described IndieAuth, but using .well-known instead of a follow-your-nose approach.

    Email addresses are URLs too. If you assume an http:// scheme for an email address, fetching http://aaron@parecki.com/ provides the server with aaron as the username. Try it out:

    curl -i http://aaron@parecki.com/
    

    I made that site send an HTTP redirect to my actual website, so I can log in with my email address anywhere that uses IndieAuth right now.

    Supporting two-factor auth, or passwordless auth is entirely up to the IndieAuth server, as it's not part of the federation spec. In fact, I already have passwordless login to my website using a push notification to my phone which works with every IndieAuth client already because the clients don't care how I authenticate to my website, just that I do authenticate.

    As for your point about the bridge, anyone can create a generic IndieAuth provider that provides identities to anyone who wants one and doesn't care about owning their identity. They enter generic.co/user1 as their URL when they sign in. It's up to that service to make actually authenticating users as easy as possible, whether that's by emailing a one-time link, setting up a mobile app for push notifications, using a regular password, or whatever.

    Portland, Oregon, USA • 72°F
    Tue, Jul 10, 2018 2:27pm -07:00
  • balloob https://github.com/balloob   •   Jul 9

    #21 Allowing local IP addresses in client identifiers

    Aaron Parecki

    I could see extending the limitation of the loopback address to also include the private IP ranges. I assume in that case it is extremely unlikely that the server will have an https certificate, so that's another reason to keep the limitation on the private IP ranges rather than allowing arbitrary IP addresses.

    One of the benefits of the client ID being a publicly accessible web page is that the authorization server can fetch the application name and icon from that page.

    with client info

    In the case of using a private IP address, the authorization server won't be able to fetch any information about the client, so the prompt will show just the IP.

    private ip address

    The other option is to use https://www.home-assistant.io/ as the client ID, allowing just the redirect URL to be a private IP. This breaks the rule of the client ID and redirect URL hostnames matching, so servers may show a warning like the below, but at least the application info is visible.

    redirect URL warning

    Portland, Oregon, USA • 59°F
    Mon, Jul 9, 2018 5:51am -07:00
  • Michael Bishop https://miklb.com   •   Jul 8

    My greatest lifehack has probably been removing the laptop charger from near the couch.

    Aaron Parecki
    And here i was thinking about installing one there permanently
    Portland, Oregon • 77°F
    Sun, Jul 8, 2018 8:37pm -07:00
  • amit https://micro.blog/amit   •   Jul 8

    @aaronpk I agree, you get to read multiple perspective on a topic. Of course, they are comments on web; so have to sort through some terrible ones. But I find the overall balance is on manageable side.

    Aaron Parecki
    It's a little nervewracking when it's about your own post. I decided to stay out of the discussion there this time.
    Portland, Oregon • 71°F
    Sat, Jul 7, 2018 9:52pm -07:00
  • always coming home https://cybre.space/@nightpool   •   Jul 8

    @aaronpk yeah. this was judged this least-complicated of all the possible options

    Aaron Parecki
    Yeah, that's surprisingly simple. We need to work on the Microformats markup for that though. Although it came through not completely broken on my website as is.
    Portland, Oregon • 71°F
    Sat, Jul 7, 2018 8:56pm -07:00
  • coolaj86 https://github.com/coolaj86   •   Apr 23

    #3837 Simpler UX for OAuth2 login with GitHub

    Aaron Parecki
    Here's a post I just wrote explaining IndieAuth and how it solves a number of the challenges with OAuth in this context.

    https://aaronparecki.com/2018/07/07/7/oauth-for-the-open-web
    Portland, Oregon • 71°F
    Sat, Jul 7, 2018 8:54pm -07:00
  • always coming home https://cybre.space/@nightpool   •   Jul 8

    @aaronpk :oh_no:

    Aaron Parecki
    so wait... you include :something: in the text of your post, then include an "Emoji" tag with the name :something: and the client matches it up?
    Portland, Oregon • 71°F
    1 reply
    Sat, Jul 7, 2018 8:50pm -07:00
  • Syl and Miku https://www.instagram.com/sylandmiku   •   Jul 7
    One of the only pictures we took from #firstcaturdaypdx. We got way too distracted by all the cute cats!

    We loved seeing @roarpdx there! Miku and Syl love their new #catdancer

    #mikucat #caturday #cats #catsofinstagram #adventurecatintraining
    Aaron Parecki
    @indiewebcat we gotta get you ready for this next year!
    Portland, Oregon, USA • 72°F
    Sat, Jul 7, 2018 8:42pm -07:00
  • https://github.com/tootsuite/mastodon

    Include timezone offset in machine-readable timestamp

    Toots are displayed in (someone's) local time, but the machine readable date is always rendered in UTC.
    continue reading...
    Sat, Jul 7, 2018 8:35pm -07:00
older

Hi, I'm Aaron Parecki, Director of Identity Standards at Okta, and co-founder of IndieWebCamp. I maintain oauth.net, write and consult about OAuth, and participate in the OAuth Working Group at the IETF. I also help people learn about video production and livestreaming. (detailed bio)

I've been tracking my location since 2008 and I wrote 100 songs in 100 days. I've spoken at conferences around the world about owning your data, OAuth, quantified self, and explained why R is a vowel. Read more.

  • Director of Identity Standards at Okta
  • IndieWebCamp Founder
  • OAuth WG Editor
  • OpenID Board Member

  • ๐ŸŽฅ YouTube Tutorials and Reviews
  • ๐Ÿ  We're building a triplex!
  • โญ๏ธ Life Stack
  • โš™๏ธ Home Automation
  • All
  • Articles
  • Bookmarks
  • Notes
  • Photos
  • Replies
  • Reviews
  • Trips
  • Videos
  • Contact
© 1999-2025 by Aaron Parecki. Powered by p3k. This site supports Webmention.
Except where otherwise noted, text content on this site is licensed under a Creative Commons Attribution 3.0 License.
IndieWebCamp Microformats Webmention W3C HTML5 Creative Commons
WeChat ID
aaronpk_tv