Machine-to-machine authentication #1233
mrcleanandfresh
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
I want to be able to do machine-to-machine authentication with user accounts. I believe OAuth 2.0 defines this as "Authorization Code Flow." But I'm not using OAuth, it's an example of what I'm looking for: machine-to-machine authentication using a token. So I created a new class that implements
AuthenticationService
calledAccountsToken
.I just have one method
authenticate
in it, and that method is almost an exact copy of theauthenticate
from@accounts/password
'sAccountPassword#authenticate
method. I finished the implementation, and was able to copy most of the unit tests fromAccountsPassword
and modifying them slightly. So it took me about a day to do the unit testing, and implementation and now I've got a whole new service in my accounts app! I'd share it, but a better example would be looking at theauthenticate
andpasswordAuthenticator
methods fromAccountsPassword
that's what I used, including the way errors were handled.Then, since I'm using the GraphQL package, I made a request to it like so:
One thing of note:
Even though the source code for
AccountsPassword#authenticate
indicatesuser
can be either astring
or anLoginUserIdentity
:This is not true, since the GraphQL API expects that it be
UserInput
which most closely mirrors theLoginUserIdentity
type, although not exactly:Thought I'd share that here, since I found that out while implementing my token service. Something to keep in mind if you're wondering why you're seeing user as a string or object in the source, then are unable to do the same in GraphQL.
I really, really enjoyed the flexibility of being able to create a new service and bolt it on to AccountsJS! It worked really well, and felt nice from an implementation standpoint. You just implement the
AuthenticationService
and it gives you only about 4 things to worry about: two instance vars and two methods. Pretty simple, extensible and powerful! Then, because I'm using Fastify, I created a plugin:I noticed that the type augmentation will work anywhere (in Fastify), but I liked it co-located and isolated with my plugin. Unfortunately, I couldn't isolate the
verifyPassword
function, but I don't plan on creating a package, so it's fine. Plus, myaccounts-password
plugin shares thatverifyPassword
function.Final step is to wire it all together in
AccountsServer
:Versions
Beta Was this translation helpful? Give feedback.
All reactions