evan,
@evan@cosocial.ca avatar

I started a FEP to define an 2.0 profile for the API (“c2s”):

https://codeberg.org/fediverse/fep/pulls/162

I’d appreciate any feedback or support. I’ve begun implementing this profile, and I think it’s testing out pretty well.

gam3,

@evan line 26 having => have
line 29 for client developers had => remove had

thisismissem,
@thisismissem@hachyderm.io avatar

@evan why not just OIDC? It's already well defined..

evan, (edited )
@evan@cosocial.ca avatar

<DELETED>

UPDATE: I gave a petulant answer here. Any feedback is good feedback, and Em has an important topic I need to address in the document. I'm sorry, @thisismissem .

thisismissem,
@thisismissem@hachyderm.io avatar

@evan no, I mean, I don't see why it'd make sense to define a custom profile of OAuth 2.0 when OIDC exists and we could just use it?

What does defining a custom profile really give us? Our authentication needs can't be that unique, can they?

evan,
@evan@cosocial.ca avatar

@thisismissem

Are you thinking about the OpenID Connect dynamic client registration feature?

https://openid.net/specs/openid-connect-registration-1_0.html

thisismissem,
@thisismissem@hachyderm.io avatar

@evan so currently all the different fediverse services that implement OAuth implement different bits of specs & don't support discovery of authorization server metadata; additionally, they rarely support PKCE. Dynamic Client Registration is supported, but OIDC Federation would likely be better.

The scopes you define look like they could conflict with existing implementations, and are also not discoverable by the client.

evan,
@evan@cosocial.ca avatar

@thisismissem

I'll take this a step at a time.

"so currently all the different fediverse services that implement OAuth implement different bits of specs & don't support discovery of authorization server metadata"

Right, that's why an OAuth 2.0 profile is necessary. Very few of them implement the ActivityPub API, either.

evan,
@evan@cosocial.ca avatar

@thisismissem "additionally, they rarely support PKCE." right.

evan, (edited )
@evan@cosocial.ca avatar

@thisismissem "but OIDC Federation would likely be better."

So, you're talking literally about this process here, right?

https://openid.net/specs/openid-connect-federation-1_0.html

evan,
@evan@cosocial.ca avatar

@thisismissem "The scopes you define look like they could conflict with existing implementations"

This seems low risk. I would be really surprised if there are implementations with "read" and "write" scopes that don't mean about what this spec defines.

"and are also not discoverable by the client."

That's what the FEP is for.

thisismissem,
@thisismissem@hachyderm.io avatar

@evan correct

timbray,
@timbray@cosocial.ca avatar

@evan @thisismissem
I don't think you should blow the question off, though. There is good library support for OIDC everywhere. Also, the OIDC development process showed that creating OAuth 2 profiles can be brutally long and complex.

evan, (edited )
@evan@cosocial.ca avatar

@timbray @thisismissem

<DELETED>

UPDATE: Fair. I'll try to dig into figuring out how OIDC could apply to the ActivityPub API, and whether this profile could be streamlined or just omitted by adopting it.

evan, (edited )
@evan@cosocial.ca avatar

@timbray @thisismissem I can say that one nice part about using an ActivityPub ID for the client ID is that it is global; the same app using two different servers will have the same ID.

This lets us do things like use shared app blocklists, reputation systems, and other security mechanisms.

Dynamic registration introduces a new ID for every server, so you can't compare across servers.

evan, (edited )
@evan@cosocial.ca avatar

@timbray @thisismissem

Also, an ActivityPub ID can double as the instrument part of generated Activity objects automatically.

I'm sure there's a way to create an instrument with dynamic registration, but I think it would end up having different ActivityPub IDs for each server. Maybe there's a way to get around it with dynamic registration, though.

evan,
@evan@cosocial.ca avatar

@timbray @thisismissem Oh, and with dynamic client registration, the client app needs to keep track of the generated ID for each server it uses. Using an ActivityPub ID, it just has to keep one hard-coded string. Easy-peasy.

thisismissem,
@thisismissem@hachyderm.io avatar

@evan @timbray that's actually not necessarily a good thing in terms of dynamic client registration, where unique authorization servers should give unique client credentials

thisismissem,
@thisismissem@hachyderm.io avatar

@evan @timbray that is, DCR giving different credentials across authorization contexts is an important feature. I'm not sure how this could harm sharing blocklists or similar

evan,
@evan@cosocial.ca avatar

@thisismissem @timbray right, whereas using the ActivityPub ID means you have the same credentials across different servers.

Credential management on the client side, and not being able to compare clients on the server side, seem like disadvantages, not advantages.

Am I missing something?

thisismissem,
@thisismissem@hachyderm.io avatar

@evan @timbray so OIDC Federation, or even Client Identifier Documents (as proposed by Solid OIDC) resolve that issue whilst maintaining unique client credentials

evan,
@evan@cosocial.ca avatar

@thisismissem @timbray so, OIDC Federation seems really complicated; all the trust chains and what have you. Is the trust aspect necessary? Who would act as the root of trust? It gives me an uncomfortable feeling.

thisismissem,
@thisismissem@hachyderm.io avatar

@evan @timbray tbh, the trust chains in OIDC Federation are complicated, but the overall notion of a client using an IRI as it's client_id when registering is really cool / powerful

evan,
@evan@cosocial.ca avatar

@thisismissem @timbray another thing I forgot to mention is that the ActivityPub ID can be an an actor ID, with an inbox and outbox. So, it's possible to follow the app, send feedback, or whatever other kind of live interactions are needed.

thisismissem,
@thisismissem@hachyderm.io avatar

@evan @timbray I think that'd be achievable via OIDC Federation or Client Identifier Documents too!

evan,
@evan@cosocial.ca avatar

Probably the two things that are novel about this profile:

  1. It uses ActivityPub IDs as the client ID in the OAuth authorization flow.
  2. It includes a scope for only writing to a particular server.
  • All
  • Subscribed
  • Moderated
  • Favorites
  • fediverse
  • DreamBathrooms
  • ngwrru68w68
  • tester
  • magazineikmin
  • thenastyranch
  • rosin
  • khanakhh
  • InstantRegret
  • Youngstown
  • slotface
  • Durango
  • kavyap
  • mdbf
  • tacticalgear
  • JUstTest
  • osvaldo12
  • normalnudes
  • cubers
  • cisconetworking
  • everett
  • GTA5RPClips
  • ethstaker
  • Leos
  • provamag3
  • anitta
  • modclub
  • megavids
  • lostlight
  • All magazines