Skip to content

jwt auth with run-router-local-entitled #487

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/local-router-no-code.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ jobs:
docker-compose \
-f docker-compose.yaml \
-f opentelemetry/docker-compose.otel.yaml \
-f examples/local/docker-compose.router-no-code.yaml \
-f misc/local/docker-compose.router-no-code.yaml \
logs
- name: docker-compose down
run: docker-compose down --remove-orphans
6 changes: 5 additions & 1 deletion .scripts/graph-api-env-export.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,8 @@ else
fi

export APOLLO_KEY=$APOLLO_KEY
export APOLLO_GRAPH_REF=$APOLLO_GRAPH_REF
export APOLLO_GRAPH_REF=$APOLLO_GRAPH_REF

#echo "key:$APOLLO_KEY"
#.echo "ref:$APOLLO_GRAPH_REF"
#export APOLLO_UPLINK_ENDPOINTS="https://aws.uplink.api.apollographql.com/, https://uplink.api.apollographql.com/"
16 changes: 15 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ run-router:
./router --version && \
./router --dev \
-c ./supergraph/router.yaml \
--log info
--log "info,apollo_router::uplink=debug"

.PHONY: query
query:
Expand Down Expand Up @@ -240,6 +240,20 @@ run-router-local:
-s ./supergraph/schema/local.graphql \
--log info

# standalone router with local composition and uplink entitlement

.PHONY: run-supergraph-local-entitled
run-supergraph-local-entitled: up-subgraphs config compose run-router-local-entitled

.PHONY: run-router-local-entitled
run-router-local-entitled:
@source "./.scripts/graph-api-env.sh" && set -x; \
./router --version && \
./router --dev \
-c ./supergraph/router.yaml \
-s ./supergraph/schema/local.graphql \
--log "info,apollo_router::uplink=debug"

# standalone router with local composition and no --dev flag

.PHONY: run-supergraph-local-no-dev
Expand Down
10 changes: 8 additions & 2 deletions subgraphs/products/products.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.1",
@link(url: "https://specs.apollo.dev/federation/v2.3",
import: ["@key", "@shareable", "@tag", "@inaccessible", "@composeDirective"])
@link(url: "https://myspecs.dev/myDirective/v1.0", import: ["@myDirective", { name: "@anotherDirective", as: "@hello" }])
@composeDirective(name: "@myDirective")
Expand Down Expand Up @@ -30,7 +30,13 @@ interface SkuItf {
sku: String
}

type Product implements ProductItf & SkuItf @key(fields: "id") @key(fields: "sku package") @key(fields: "sku variation { id }"){
interface Prod @key(fields: "id"){
id: ID!
sku: String
name: String
}

type Product implements Prod & ProductItf & SkuItf @key(fields: "id") @key(fields: "sku package") @key(fields: "sku variation { id }"){
id: ID! @tag(name: "hi-from-products")
sku: String
name: String @hello
Expand Down
9 changes: 9 additions & 0 deletions supergraph/router.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@ telemetry:
protocol: grpc
batch_processor:
max_export_timeout: 42s
authentication:
jwt:
jwks: # This key is required.
- url: https://dev-zzp5enui.us.auth0.com/.well-known/jwks.json
issuer: auth0

# These keys are optional. Default values are shown.
header_name: Authorization
header_value_prefix: Bearer

# --------------------
# note: `router --dev` has these default settings and enables the --hot-reload flag
Expand Down
33 changes: 23 additions & 10 deletions supergraph/schema/docker.graphql
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
schema
@link(url: "https://specs.apollo.dev/link/v1.0")
@link(url: "https://specs.apollo.dev/join/v0.2", for: EXECUTION)
@link(url: "https://specs.apollo.dev/tag/v0.2")
@link(url: "https://specs.apollo.dev/join/v0.3", for: EXECUTION)
@link(url: "https://specs.apollo.dev/tag/v0.3")
@link(url: "https://specs.apollo.dev/inaccessible/v0.2", for: SECURITY)
@link(url: "https://myspecs.dev/myDirective/v1.0", import: ["@myDirective", {name: "@anotherDirective", as: "@hello"}])
{
Expand All @@ -12,19 +12,23 @@ directive @hello on FIELD_DEFINITION

directive @inaccessible on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION

directive @join__field(graph: join__Graph!, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION
directive @join__enumValue(graph: join__Graph!) repeatable on ENUM_VALUE

directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION

directive @join__graph(name: String!, url: String!) on ENUM_VALUE

directive @join__implements(graph: join__Graph!, interface: String!) repeatable on OBJECT | INTERFACE

directive @join__type(graph: join__Graph!, key: join__FieldSet, extension: Boolean! = false, resolvable: Boolean! = true) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR
directive @join__type(graph: join__Graph!, key: join__FieldSet, extension: Boolean! = false, resolvable: Boolean! = true, isInterfaceObject: Boolean! = false) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR

directive @join__unionMember(graph: join__Graph!, member: String!) repeatable on UNION

directive @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA

directive @myDirective(a: String!) on FIELD_DEFINITION

directive @tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION
directive @tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION | SCHEMA

type DeliveryEstimates
@join__type(graph: INVENTORY)
Expand Down Expand Up @@ -64,8 +68,17 @@ type Panda
favoriteFood: String @tag(name: "nom-nom-nom")
}

type Product implements ProductItf & SkuItf
interface Prod
@join__type(graph: PRODUCTS, key: "id")
{
id: ID!
sku: String
name: String
}

type Product implements ProductItf & Prod & SkuItf
@join__implements(graph: INVENTORY, interface: "ProductItf")
@join__implements(graph: PRODUCTS, interface: "Prod")
@join__implements(graph: PRODUCTS, interface: "ProductItf")
@join__implements(graph: PRODUCTS, interface: "SkuItf")
@join__implements(graph: REVIEWS, interface: "ProductItf")
Expand Down Expand Up @@ -151,9 +164,9 @@ enum ShippingClass
@join__type(graph: INVENTORY)
@join__type(graph: PRODUCTS)
{
STANDARD
EXPRESS
OVERNIGHT
STANDARD @join__enumValue(graph: INVENTORY) @join__enumValue(graph: PRODUCTS)
EXPRESS @join__enumValue(graph: INVENTORY) @join__enumValue(graph: PRODUCTS)
OVERNIGHT @join__enumValue(graph: INVENTORY)
}

interface SkuItf
Expand All @@ -169,4 +182,4 @@ type User
email: ID! @tag(name: "test-from-users")
totalProductsCreated: Int
name: String @join__field(graph: USERS)
}
}
33 changes: 23 additions & 10 deletions supergraph/schema/local.graphql
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
schema
@link(url: "https://specs.apollo.dev/link/v1.0")
@link(url: "https://specs.apollo.dev/join/v0.2", for: EXECUTION)
@link(url: "https://specs.apollo.dev/tag/v0.2")
@link(url: "https://specs.apollo.dev/join/v0.3", for: EXECUTION)
@link(url: "https://specs.apollo.dev/tag/v0.3")
@link(url: "https://specs.apollo.dev/inaccessible/v0.2", for: SECURITY)
@link(url: "https://myspecs.dev/myDirective/v1.0", import: ["@myDirective", {name: "@anotherDirective", as: "@hello"}])
{
Expand All @@ -12,19 +12,23 @@ directive @hello on FIELD_DEFINITION

directive @inaccessible on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION

directive @join__field(graph: join__Graph!, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION
directive @join__enumValue(graph: join__Graph!) repeatable on ENUM_VALUE

directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION

directive @join__graph(name: String!, url: String!) on ENUM_VALUE

directive @join__implements(graph: join__Graph!, interface: String!) repeatable on OBJECT | INTERFACE

directive @join__type(graph: join__Graph!, key: join__FieldSet, extension: Boolean! = false, resolvable: Boolean! = true) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR
directive @join__type(graph: join__Graph!, key: join__FieldSet, extension: Boolean! = false, resolvable: Boolean! = true, isInterfaceObject: Boolean! = false) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR

directive @join__unionMember(graph: join__Graph!, member: String!) repeatable on UNION

directive @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA

directive @myDirective(a: String!) on FIELD_DEFINITION

directive @tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION
directive @tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION | SCHEMA

type DeliveryEstimates
@join__type(graph: INVENTORY)
Expand Down Expand Up @@ -64,8 +68,17 @@ type Panda
favoriteFood: String @tag(name: "nom-nom-nom")
}

type Product implements ProductItf & SkuItf
interface Prod
@join__type(graph: PRODUCTS, key: "id")
{
id: ID!
sku: String
name: String
}

type Product implements ProductItf & Prod & SkuItf
@join__implements(graph: INVENTORY, interface: "ProductItf")
@join__implements(graph: PRODUCTS, interface: "Prod")
@join__implements(graph: PRODUCTS, interface: "ProductItf")
@join__implements(graph: PRODUCTS, interface: "SkuItf")
@join__implements(graph: REVIEWS, interface: "ProductItf")
Expand Down Expand Up @@ -151,9 +164,9 @@ enum ShippingClass
@join__type(graph: INVENTORY)
@join__type(graph: PRODUCTS)
{
STANDARD
EXPRESS
OVERNIGHT
STANDARD @join__enumValue(graph: INVENTORY) @join__enumValue(graph: PRODUCTS)
EXPRESS @join__enumValue(graph: INVENTORY) @join__enumValue(graph: PRODUCTS)
OVERNIGHT @join__enumValue(graph: INVENTORY)
}

interface SkuItf
Expand All @@ -169,4 +182,4 @@ type User
email: ID! @tag(name: "test-from-users")
totalProductsCreated: Int
name: String @join__field(graph: USERS)
}
}