RSocket Simple auth in NodeJS

26 Views Asked by At

I struggle making a RSocket request with simple auth from NodeJS (client) to Java Spring (server). I am sure that the problem resides in JS code because :

  • it works well without auth
  • Java Spring (client) to the Java Spring (server) works well with simple auth

Here is my NodeJS client:

const { RSocketConnector } = require('rsocket-core')
const { TcpClientTransport } = require('rsocket-tcp-client')
const { encodeRoute, encodeCompositeMetadata, WellKnownMimeType, encodeSimpleAuthMetadata } = require('rsocket-composite-metadata')
const { IdentitySerializer } = require('rsocket-core')
const MESSAGE_RSOCKET_ROUTING = WellKnownMimeType.MESSAGE_RSOCKET_ROUTING
const MESSAGE_RSOCKET_COMPOSITE_METADATA = WellKnownMimeType.MESSAGE_RSOCKET_COMPOSITE_METADATA
const MESSAGE_RSOCKET_AUTHENTICATION = WellKnownMimeType.MESSAGE_RSOCKET_AUTHENTICATION


function makeConnector() {
  return new RSocketConnector({
    setup: {
      metadataMimeType: MESSAGE_RSOCKET_COMPOSITE_METADATA.string,
    },
    serializers: {
      metadata: IdentitySerializer,
    },
    transport: new TcpClientTransport({
      connectionOptions: {
        host: "127.0.0.1",
        port: 6120,
      },
    }),
  })
}

function createMetadata(route) {
  const encodedRoute = encodeRoute(route)
  const encodedSimpleAuth = encodeSimpleAuthMetadata("user", "pass")

  const map = new Map()
  map.set(MESSAGE_RSOCKET_ROUTING.string, encodedRoute)
  map.set(MESSAGE_RSOCKET_AUTHENTICATION.string, encodedSimpleAuth)
  
  return encodeCompositeMetadata(map)
}

function requestResponse(rsocket, route, data) {
  return rsocket.requestResponse(
    {
      data: Buffer.from(data),
      metadata: createMetadata(route),
    },
    {
      onError: (e) => {
        console.error(e)
      },
      onNext: (payload, isComplete) => {
        console.info(`requestResponse onNext payload[data: ${payload.data}; metadata: ${payload.metadata}]|${isComplete}`)
      },
      onComplete: () => {
        console.info(`requestResponse onComplete`)
      },
      onExtension: () => {},
    }
  )
}

async function start() {
  const connector = makeConnector()
  const rsocket = await connector.connect()

  requestResponse(rsocket, "request-response", "some data")
}

start()

I constantly get Access Denied exception.

Thanks in advance.

0

There are 0 best solutions below