mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-14 17:02:49 +03:00
update auth-webhook boilerplates for node (#4885)
1) split nodejs-express boilerplate into nodejs-express and nodejs-firebase 2) update deploy instructions for heroku
This commit is contained in:
parent
b5ca6ec29f
commit
756614c326
@ -2,37 +2,27 @@
|
||||
|
||||
This is a sample auth webhook for authenticating requests to the Hasura GraphQL engine.
|
||||
|
||||
It has boilerplate code written for firebase auth. There is also a generic sample handler in `server.js` where you can handle your custom auth providers.
|
||||
It has boilerplate code written in `server.js` where you can handle authentication.
|
||||
|
||||
## Quick deploy
|
||||
|
||||
<!--
|
||||
### Deploy with Heroku (recommended)
|
||||
|
||||
1. Click the following button for deploying to Heroku.
|
||||
Run the following commands:
|
||||
|
||||
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/hasura/sample-auth-webhook)
|
||||
```
|
||||
git clone https://github.com/hasura/graphql-engine
|
||||
cp -r graphql-engine/community/boilerplates/auth-webhooks/nodejs-express <some-dir>
|
||||
cd <some-dir>
|
||||
git init && git add . && git commit -m "init auth webhook"
|
||||
```
|
||||
|
||||
2. Once it is deployed, go to `Manage App > Settings` of your app and set the following environment variables if you want to use Firebase.
|
||||
You need to setup a Heroku app:
|
||||
|
||||
- **FIREBASE_CONFIG**: Copy the contents of your serviceAccount JSON file for this field. Example:
|
||||
```
|
||||
{
|
||||
"type": "service_account",
|
||||
"project_id": "testapp-2222",
|
||||
"private_key_id": "f02aca08952f702de43ed577b428f405efe2d377",
|
||||
"private_key": "-----BEGIN PRIVATE KEY-----\n<your-private-key>\n-----END PRIVATE KEY-----\n",
|
||||
"client_email": "firebase-adminsdk-t4sik@testapp-24a60.iam.gserviceaccount.com",
|
||||
"client_id": "113608616484852272199",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://accounts.google.com/o/oauth2/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-t4sik%40testapp-22222.iam.gserviceaccount.com"
|
||||
}
|
||||
```
|
||||
|
||||
If you are not using an auth provider, you need not enter the environment variable associated with it
|
||||
-->
|
||||
```
|
||||
heroku apps:create
|
||||
git push heroku master
|
||||
```
|
||||
|
||||
### Deploy using [Now](https://zeit.co/now)
|
||||
|
||||
@ -42,65 +32,17 @@ Run the following commands to deploy using Now.
|
||||
git clone https://github.com/hasura/graphql-engine
|
||||
cd graphql-engine/community/boilerplates/auth-webhooks/nodejs-express
|
||||
npm install -g now
|
||||
now -e \
|
||||
FIREBASE_CONFIG='{
|
||||
"type": "service_account",
|
||||
"project_id": "testapp-2222",
|
||||
"private_key_id": "f02aca08952f702de43ed577b428f405efe2d377",
|
||||
"private_key": "-----BEGIN PRIVATE KEY-----\n<your-private-key>\n-----END PRIVATE KEY-----\n",
|
||||
"client_email": "firebase-adminsdk-t4sik@testapp-24a60.iam.gserviceaccount.com",
|
||||
"client_id": "113608616484852272199",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://accounts.google.com/o/oauth2/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-t4sik%40testapp-22222.iam.gserviceaccount.com"
|
||||
}'
|
||||
```
|
||||
|
||||
If you are not using an auth provider, you need not enter the environment variable associated with it. For example, if you are not using firebase, the last command you should run is,
|
||||
|
||||
```bash
|
||||
$ now
|
||||
now
|
||||
```
|
||||
|
||||
### Deploy with Glitch
|
||||
|
||||
1. Click the following button to edit on glitch
|
||||
|
||||
[![glitch-deploy-button](assets/deploy-glitch.png)](http://glitch.com/edit/#!/import/github/hasura/graphql-engine/community/boilerplates/auth-webhooks/nodejs-express)
|
||||
|
||||
2. Add the following environment variables in the `.env` file on glitch.
|
||||
|
||||
```env
|
||||
FIREBASE_CONFIG='{
|
||||
"type": "service_account",
|
||||
"project_id": "testapp-2222",
|
||||
"private_key_id": "f02aca08952f702de43ed577b428f405efe2d377",
|
||||
"private_key": "-----BEGIN PRIVATE KEY-----\n<your-private-key>\n-----END PRIVATE KEY-----\n",
|
||||
"client_email": "firebase-adminsdk-t4sik@testapp-24a60.iam.gserviceaccount.com",
|
||||
"client_id": "113608616484852272199",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://accounts.google.com/o/oauth2/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-t4sik%40testapp-22222.iam.gserviceaccount.com"
|
||||
}'
|
||||
```
|
||||
|
||||
If you are not using an auth provider, you need not enter the environment variable associated with it.
|
||||
Click the following button to edit on glitch
|
||||
|
||||
[![glitch-deploy-button](assets/deploy-glitch.png)](http://glitch.com/edit/#!/import/github/hasura/graphql-engine/community/boilerplates/auth-webhooks/nodejs-express)
|
||||
|
||||
## Usage with Hasura GraphQL engine
|
||||
|
||||
Once you have deployed this webhook, you can use it along with the GraphQL engine. You have to set the webhook URL as an environment variable in the docker container that runs the GraphQL engine.
|
||||
|
||||
*[Read the docs](https://hasura.io/docs/1.0/graphql/manual/auth/authentication/webhook.html).*
|
||||
|
||||
### Firebase
|
||||
|
||||
Send the firebase `id_token` as a header while making queries to the `graphql-engine`.
|
||||
|
||||
```
|
||||
{
|
||||
"Authorization": "Bearer <id_token>"
|
||||
}
|
||||
```
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,9 @@
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "server.js",
|
||||
"engines": {
|
||||
"node": "10.16.x"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "node server.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
@ -11,7 +14,6 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.16.3",
|
||||
"firebase-admin": "^5.12.1",
|
||||
"request": "^2.87.0"
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ app.get('/', (req, res) => {
|
||||
res.send('Webhooks are running');
|
||||
});
|
||||
|
||||
app.get('/simple/webhook', (request, response) => {
|
||||
app.get('/webhook', (request, response) => {
|
||||
// Extract token from request
|
||||
var token = request.get('Authorization');
|
||||
|
||||
@ -38,10 +38,6 @@ app.get('/simple/webhook', (request, response) => {
|
||||
});
|
||||
});
|
||||
|
||||
// Firebase handler
|
||||
var firebaseRouter = require('./firebase/firebaseHandler');
|
||||
app.use('/firebase', firebaseRouter);
|
||||
|
||||
// listen for requests :)
|
||||
var listener = app.listen(port, function () {
|
||||
console.log('Your app is listening on port ' + port);
|
||||
|
1
community/boilerplates/auth-webhooks/nodejs-firebase/.gitignore
vendored
Normal file
1
community/boilerplates/auth-webhooks/nodejs-firebase/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*node_modules
|
@ -0,0 +1 @@
|
||||
web: node server.js
|
104
community/boilerplates/auth-webhooks/nodejs-firebase/README.md
Normal file
104
community/boilerplates/auth-webhooks/nodejs-firebase/README.md
Normal file
@ -0,0 +1,104 @@
|
||||
# Sample Auth Webhook with Firebase for Hasura GraphQL engine
|
||||
|
||||
This is a sample auth webhook for Hasura which forwards requests to Firebase auth and transforms the response.
|
||||
|
||||
## Quick deploy
|
||||
|
||||
### Deploy with Heroku (recommended)
|
||||
|
||||
Run the following commands:
|
||||
|
||||
```
|
||||
|
||||
git clone https://github.com/hasura/graphql-engine
|
||||
cp -r graphql-engine/community/boilerplates/auth-webhooks/nodejs-express <some-dir>
|
||||
cd <some-dir>
|
||||
git init && git add . && git commit -m "init auth webhook"
|
||||
```
|
||||
|
||||
You need to setup a Heroku app:
|
||||
|
||||
```
|
||||
heroku apps:create
|
||||
git push heroku master
|
||||
```
|
||||
|
||||
Once it is deployed, go to `Manage App > Settings` of your app and set the following environment variables for Firebase:
|
||||
|
||||
- **FIREBASE_CONFIG**: Copy the contents of your serviceAccount JSON file for this field. Example:
|
||||
```
|
||||
{
|
||||
"type": "service_account",
|
||||
"project_id": "testapp-2222",
|
||||
"private_key_id": "f02aca08952f702de43ed577b428f405efe2d377",
|
||||
"private_key": "-----BEGIN PRIVATE KEY-----\n<your-private-key>\n-----END PRIVATE KEY-----\n",
|
||||
"client_email": "firebase-adminsdk-t4sik@testapp-24a60.iam.gserviceaccount.com",
|
||||
"client_id": "113608616484852272199",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://accounts.google.com/o/oauth2/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-t4sik%40testapp-22222.iam.gserviceaccount.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Deploy using [Now](https://zeit.co/now)
|
||||
|
||||
Run the following commands to deploy using Now.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/hasura/graphql-engine
|
||||
cd graphql-engine/community/boilerplates/auth-webhooks/nodejs-express
|
||||
npm install -g now
|
||||
now -e \
|
||||
FIREBASE_CONFIG='{
|
||||
"type": "service_account",
|
||||
"project_id": "testapp-2222",
|
||||
"private_key_id": "f02aca08952f702de43ed577b428f405efe2d377",
|
||||
"private_key": "-----BEGIN PRIVATE KEY-----\n<your-private-key>\n-----END PRIVATE KEY-----\n",
|
||||
"client_email": "firebase-adminsdk-t4sik@testapp-24a60.iam.gserviceaccount.com",
|
||||
"client_id": "113608616484852272199",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://accounts.google.com/o/oauth2/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-t4sik%40testapp-22222.iam.gserviceaccount.com"
|
||||
}'
|
||||
```
|
||||
|
||||
### Deploy with Glitch
|
||||
|
||||
1. Click the following button to edit on glitch
|
||||
|
||||
[![glitch-deploy-button](assets/deploy-glitch.png)](http://glitch.com/edit/#!/import/github/hasura/graphql-engine/community/boilerplates/auth-webhooks/nodejs-express)
|
||||
|
||||
2. Add the following environment variables in the `.env` file on glitch.
|
||||
|
||||
```env
|
||||
FIREBASE_CONFIG='{
|
||||
"type": "service_account",
|
||||
"project_id": "testapp-2222",
|
||||
"private_key_id": "f02aca08952f702de43ed577b428f405efe2d377",
|
||||
"private_key": "-----BEGIN PRIVATE KEY-----\n<your-private-key>\n-----END PRIVATE KEY-----\n",
|
||||
"client_email": "firebase-adminsdk-t4sik@testapp-24a60.iam.gserviceaccount.com",
|
||||
"client_id": "113608616484852272199",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://accounts.google.com/o/oauth2/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-t4sik%40testapp-22222.iam.gserviceaccount.com"
|
||||
}'
|
||||
```
|
||||
|
||||
## Usage with Hasura GraphQL engine
|
||||
|
||||
Once you have deployed this webhook, you can use it along with the GraphQL engine. You have to set the webhook URL as an environment variable in the docker container that runs the GraphQL engine.
|
||||
|
||||
*[Read the docs](https://hasura.io/docs/1.0/graphql/manual/auth/authentication/webhook.html).*
|
||||
|
||||
### Firebase
|
||||
|
||||
Send the firebase `id_token` as a header while making queries to the `graphql-engine`.
|
||||
|
||||
```
|
||||
{
|
||||
"Authorization": "Bearer <id_token>"
|
||||
}
|
||||
```
|
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "sample-auth-webhook",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "server.js",
|
||||
"engines": {
|
||||
"node": "10.16.x"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "node server.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "wawhal",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.16.3",
|
||||
"firebase-admin": "^5.12.1",
|
||||
"request": "^2.87.0"
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
// Sample webhook showing what a hasura auth webhook looks like
|
||||
|
||||
// init project
|
||||
var express = require('express');
|
||||
var app = express();
|
||||
var requestClient = require('request');
|
||||
var port = process.env.PORT || 3000;
|
||||
|
||||
app.get('/', (req, res) => {
|
||||
res.send('Webhooks are running');
|
||||
});
|
||||
|
||||
// Firebase handler
|
||||
var firebaseRouter = require('./firebase/firebaseHandler');
|
||||
app.use('/firebase', firebaseRouter);
|
||||
|
||||
// listen for requests :)
|
||||
var listener = app.listen(port, function () {
|
||||
console.log('Your app is listening on port ' + port);
|
||||
});
|
Loading…
Reference in New Issue
Block a user