Hi all,
Was speaking with Leandro a bit earlier around this on Telegram.
I’ve been wanting to build a project around CashID for quite some time as I think it’s an excellent authentication method (thank you @jonathansilverblood). One of the difficulties in implementing CashID is that it requires the browser to listen persistently for the “authenticated” message from the server (e.g. long-polling/webhooks). It also requires a place to temporarily store the Challenge Request. Thus, there is some overhead in implementation that might make this difficult for some developers to implement easily.
To simplify implementation, an idea I had a while ago was to build something that could be self-hostable that allowed services to leverage CashID via OAuth/OIDC - as this means it could plug-n-play with many existing platforms (e.g. Laravel or anything else that supports OIDC). For background, OIDC is the protocol that you generally use when logging into third-party services using your Social Network account. The general (and simplified) flow is:
- Click Login with {Platform} button (in this case, “CashID”)
- Browser redirects to authentication page (in this case, it will show a CashID QR Code and Link)
- Upon successful authentication (in this case, user approves the login), user is redirected back to origin page.
- User is authenticated via the token provided by the service.
Although I have not thoroughly confirmed that Discourse supports OIDC, I did notice that OmniAuth is used - which appears to be an OIDC-supporting package. This means that the above approach ‘should’ be able to work for this.
The additional benefit of the above is that any other service that supports OIDC could also easily leverage this platform. My hope here is increased adoption by services due to ease of implementation which I hope will consequently lead to increased wallet support of CashID.
I do plan on hosting a publicly available instance of this CashID Authentication platform (e.g. cashid.infra.cash or similar), but the general advistory would be that any serious service should self-host an instance. The reason for this is that if a third-party service is leveraged as an IdP (e.g. cashid.infra.cash), then that service could potentially data-mine any users that authenticated with it (cashid.infra.cash will not do this - but it’s preferable if people did not have to take my word for it).
Before I begin working on this, I wanted to put out a feeler and see if anyone has any feedback and whether there would be any objections to taking this approach. I’ve been very vague on the technical details (some things would still need fleshing out), but can do a follow up to explain in more details (it’s basically just an OAuth/OIDC flow implementing CashID as Auth mechanism).
Thanks all, feel free to reach out on Telegram if any questions also.