При использовании JWKS с Auth0, какая аудитория и эмитент, если я использую localhost? - PullRequest
0 голосов
/ 01 мая 2019

Я реализовал JWT в своем приложении Node Koa:

import Router from 'koa-router-middleware';
import { ApplicationState, ApplicationContext } from './types';
import configure from './configure';
import swagger from './swagger';
import healthcheck from './healthcheck';
import helloworld from './helloworld';
const jwt = require('jsonwebtoken');
// import * as jwt from 'jsonwebtoken'; << TODO
import * as koajwt from 'koa-jwt';

export default new Router<ApplicationState, ApplicationContext>()
  .use(configure)
  .use('/openapi.json', swagger)
  .use('/', helloworld)
  .use('/healthcheck', healthcheck)
  .use('/token', (ctx) => {
    const token = jwt.sign({ data: 'tokenData' }, 'secret');
    ctx.response.body = token;
  })
  // Secure routes
  .use(koajwt({ secret: 'secret' }))
  .use('/secure', helloworld)
  .middleware();

Это работает ^ и теперь я пытаюсь заставить его работать с Auth0, поэтому я посмотрел на JWKS и вот что у меня есть:

import Router from 'koa-router-middleware';
import { ApplicationState, ApplicationContext } from './types';
import configure from './configure';
import swagger from './swagger';
import healthcheck from './healthcheck';
import helloworld from './helloworld';
// const jsonwebtoken = require('jsonwebtoken');
// import * as jwt from 'jsonwebtoken'; << TODO
import * as jwt from 'koa-jwt';
const jwksRsa = require('jwks-rsa');

const jwksHost = 'omitted'
const audience = 'http://localhost:8080'
const issuer = '??'

export default new Router<ApplicationState, ApplicationContext>()
  .use(configure)
  .use('/openapi.json', swagger)
  .use('/', helloworld)
  .use('/healthcheck', healthcheck)
  .use(jwt({
    secret: jwksRsa.koaJwtSecret({
      cache: true,
      rateLimit: true,
      jwksRequestsPerMinute: 2,
      jwksUri: `${jwksHost}/.well-known/jwks.json`
    }),
    audience,
    issuer,
    algorithms: [ 'RS256' ]
  }))

  // Secure routes. Anything below this comment needs a jwt token
  .use('/secure', helloworld)
  .middleware();

Первый вопрос: могу ли я сделать это с localhost или мне нужно загрузить свой код, чтобы он работал?

Второй вопрос: я использую конечную точку JWKS, которую Auth0 назначил мне при создании учетной записи. Могу ли я считать, что для каждой учетной записи существует только одна конечная точка JWKS, даже если эта учетная запись имеет несколько API-интерфейсов? (на этом веб-сайте написано, что есть один на каждого арендатора, который, я предполагаю, означает учетную запись, но я хочу подтвердить)

Третий вопрос: кроме аудитории и издателя, этот код выглядит правильно или он что-то упустил?

1 Ответ

0 голосов
/ 29 мая 2019

Посмотрите на ответ на это

Похоже, что должно быть:

audience: 'http://localhost:3000', // With your port
issuer: `https://${process.env.AUTH0_DOMAIN}/` // Your Auth0 domain
...