Skip to content
This repository has been archived by the owner on Apr 17, 2023. It is now read-only.

Access token is undefined in context #136

Open
okanji opened this issue Apr 18, 2022 · 1 comment
Open

Access token is undefined in context #136

okanji opened this issue Apr 18, 2022 · 1 comment

Comments

@okanji
Copy link

okanji commented Apr 18, 2022

I am trying to make an authenticated request from postman to my node, apollo, express backend. I am getting an error saying that the user is unauthenticated. When I look at the context object, there is no access token and calling context.kauth.isAuthenticated() returns false.

Looking at the access token, I can see that accessToken is indeed blank, but there does exist the Bearer Token in the request header.

enter image description here
enter image description here

So I am not sure why the access token is not being included. Could this be a bug?

I am making the request from postman, I am including the token in the request like so:

enter image description here

In order to get this access token, I am first making a postman request to keycloak to generate this token like so (note that I am intentionally not showing my username and password for this post

enter image description here

I am using the above access token in my postman request above.

This is what my index.js file looks like:

    require("dotenv").config();
    import { ApolloServer } from "apollo-server-express";
    import { ApolloServerPluginDrainHttpServer } from "apollo-server-core";
    const { makeExecutableSchema } = require('@graphql-tools/schema');
    import { configureKeycloak } from "./auth/config"
    import {
      KeycloakContext,
      KeycloakTypeDefs,
      KeycloakSchemaDirectives,
    } from "keycloak-connect-graphql";
    import { applyDirectiveTransformers } from "./auth/transformers";
    import express from "express";
    import http from "http";
    import typeDefs from "./graphql/typeDefs";
    import resolvers from "./graphql/resolvers";
    import { MongoClient } from "mongodb";
    import MongoHelpers from "./dataSources/MongoHelpers";
    
    async function startApolloServer(typeDefs, resolvers) {
    
      const client = new MongoClient(process.env.MONGO_URI);
      client.connect();
    
      let schema = makeExecutableSchema({
        typeDefs: [KeycloakTypeDefs, typeDefs],
        resolvers
      });
    
      schema = applyDirectiveTransformers(schema);
    
      const app = express();
      const httpServer = http.createServer(app);
    
      const { keycloak } = configureKeycloak(app, '/graphql')    
    
      const server = new ApolloServer({
        schema,
        schemaDirectives: KeycloakSchemaDirectives,
        resolvers,
        context: ({ req }) => {
          return {
            kauth: new KeycloakContext({ req }, keycloak) 
          }
          
        },
        plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
      });
      await server.start();
      server.applyMiddleware({ app });
      await new Promise((resolve) => httpServer.listen({ port: 4000 }, resolve));
      console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`);
    }
    
    startApolloServer(typeDefs, resolvers);

And this is my keyclaok.json file:

enter image description here

I am really quite stummped, my initial thought is that I am not making the reqest from postman correctly. Am grateful for any guidance

@rweintraub-cycleon
Copy link

@okanji did you have any luck with this problem? I'm currently stuck with exactly the same problem

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants