23
HOW TO AUTH: SECURE A GRAPHQL API WITH CONFIDENCE MANDI WISE | GRAPHQL SUMMIT 2020

HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

HOW TO AUTH:SECURE A GRAPHQL API WITH CONFIDENCE

MANDI WISE | GRAPHQL SUMMIT 2020

Page 2: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

GRAPHQL SUMMIT 2020

Authentication

Authorization

Federation

AGENDA

Page 3: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

AUTHAUTHORIZATION

YOU CAN DO WHAT YOU WANT TO DOYOU ARE WHO YOU SAY YOU ARE

AUTHENTICATION

Page 4: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver
Page 5: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

AUTHENTICATION:YOU ARE WHO YOU SAY YOU ARE

Page 6: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

GRAPHQL SUMMIT 2020

STARTING POINT

We don’t want to lockdown our entire GraphQL endpoint

We’re going to use JSON Web Tokens for auth

We’ll use Express with Apollo Server

Page 7: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL3NwYWNlYXBpLmNvbS9ncmFwaHFsIjp7InJvbGVzIjpbImFzdHJvbmF1dCJdLCJwZXJtaXNzaW9ucyI6WyJyZWFkOm93bl91c2VyIl19LCJpYXQiOjE1OTQyNTI2NjMsImV4cCI6MTU5NDMzOTA2Mywic3ViIjoiNjc4OTAifQ.Z1JPE53ca1JaxwDTlnofa3hwpS0PGdRLUMIrC7M3FCI

Page 8: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL3NwYWNlYXBpLmNvbS9ncmFwaHFsIjp7InJvbGVzIjpbImFzdHJvbmF1dCJdLCJwZXJtaXNzaW9ucyI6WyJyZWFkOm93bl91c2VyIl19LCJpYXQiOjE1OTQyNTI2NjMsImV4cCI6MTU5NDMzOTA2Mywic3ViIjoiNjc4OTAifQ.Z1JPE53ca1JaxwDTlnofa3hwpS0PGdRLUMIrC7M3FCI

Page 9: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver
Page 10: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL3NwYWNlYXBpLmNvbS9ncmFwaHFsIjp7InJvbGVzIjpbImFzdHJvbmF1dCJdLCJwZXJtaXNzaW9ucyI6WyJyZWFkOm93bl91c2VyIl19LCJpYXQiOjE1OTQyNTI2NjMsImV4cCI6MTU5NDMzOTA2Mywic3ViIjoiNjc4OTAifQ.Z1JPE53ca1JaxwDTlnofa3hwpS0PGdRLUMIrC7M3FCI

Page 11: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver
Page 12: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL3NwYWNlYXBpLmNvbS9ncmFwaHFsIjp7InJvbGVzIjpbImFzdHJvbmF1dCJdLCJwZXJtaXNzaW9ucyI6WyJyZWFkOm93bl91c2VyIl19LCJpYXQiOjE1OTQyNTI2NjMsImV4cCI6MTU5NDMzOTA2Mywic3ViIjoiNjc4OTAifQ.Z1JPE53ca1JaxwDTlnofa3hwpS0PGdRLUMIrC7M3FCI

Page 13: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver
Page 14: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

DEMO TIME…

Page 15: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

AUTHORIZATION:YOU CAN DO WHAT YOU WANT TO DO

Page 16: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

GRAPHQL SUMMIT 2020

A FEW OPTIONS

Handle auth logic directly in each resolver function

Page 17: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

GRAPHQL SUMMIT 2020

A FEW OPTIONS

Handle auth logic directly in each resolver function

Create custom directives (e.g. @auth(requires: DIRECTOR))

Wrap resolver functions (e.g. GraphQL Auth)

Abstract auth rules into middleware (e.g. GraphQL Shield)

Page 18: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

NOW DO FEDERATION

Page 19: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver
Page 20: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver
Page 21: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

SUMMING UP

Handle incoming tokens in the context

A viewer query can be an entry point for authenticated users

Keep explicit authorization checks out of resolver functions

Forward header from gateway API using buildService

GRAPHQL SUMMIT 2020

Page 22: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

GRAPHQL SUMMIT 2020

SHOW ME THE CODE!

https://github.com/mandiwise/basic-apollo-auth-demo

https://github.com/mandiwise/apollo-federation-auth-demo

https://github.com/mandiwise/graphql-magic-auth-demo

Page 23: HOW TO AUTH - GraphQL · GRAPHQL SUMMIT 2020 A FEW OPTIONS Handle auth logic directly in each resolver function Create custom directives (e.g. @auth(requires: DIRECTOR)) Wrap resolver

THANKS!

TWITTER & GITHUB: @MANDIWISE