1

keycloak-connectを使用して、ApolloServer に Keycloak 認証を追加しようとしています。レルムをセットアップし、からログインしましlocalhost:8080/authた。ただし、コンテキスト関数でリクエストから kauth を取得する際に問題が発生しています。

現在、次のセットアップがあります。

   const kcConfig = {
        clientId: process.env.KEYCLOAK_CLIENT_ID,
        serverUrl: `localhost:808/auth`,
        realm: process.env.KEYCLOAK_REALM,
        realmPublicKey: process.env.KEYCLOAK_REALM_PUBLIC_KEY, 
    }

    const memoryStore = new session.MemoryStore()

    app.use(session({
        secret: process.env.SESSION_SECRET_STRING || 'this should be a long secret',
        resave: false,
        saveUninitialized: true,
        store: memoryStore
    }))

    const keycloak = new Keycloak({
        store: memoryStore
    }, kcConfig as any)

    // Install general keycloak middleware
    app.use(keycloak.middleware({
        admin: graphqlPath
    }))
    
    // Protect the main route for all graphql services
    // Disable unauthenticated access
    app.use(graphqlPath, keycloak.middleware())

そして、次req.kauthのようなコンテキストでアクセスしようとします:

export interface GrantedRequest extends Request {
  kauth : {grant?: Grant};
}

const server = new ApolloServer({
    engine: {
        graphVariant: "current"
    },
    context: ({req, res} : {
        req: GrantedRequest,
        res: any
    }) => {
      console.log(req.kauth) // this line prints an empty object
      return {
        req,
        res,
        kauth: req.auth
      }
    },
    schema,
    playground: {
        settings: {
            "request.credentials": "same-origin"
        }
    }
});

ただし、リクエストから kauth プロパティを取得できません。この問題を解決するにはどうすればよいですか?

4

1 に答える 1