OAuth oidc получает доступ к пользовательской информации на стороне сервера в приложении SSR реагировать - PullRequest
3 голосов
/ 07 июня 2019

У меня есть приложение реагирования на SSR с использованием redux-oidc Я могу успешно войти в систему, используя IdentityServer4 в качестве сервера авторизации с PKCE Authorization Code Flow. Я могу получить пользовательские данные на стороне клиента приложения реагирования, но я не знаю, как это сделать на стороне сервера того же приложения реакции. Я хочу показать зарегистрированную версию страницы при первой загрузке, и для этого мне нужно получить данные пользователя при первом запросе.

const Koa = require('koa')
const next = require('next')
const Router = require('koa-router')
const jwt = require('koa-jwt')
const jwksRsa = require('jwks-rsa')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  const server = new Koa()
  const router = new Router()

  server.use(jwt({
    secret: jwksRsa.koaJwtSecret({
      jwksUri: 'http://localhost:5000/.well-known/openid-configuration/jwks'
    }),
    issuer: 'http://localhost:5000',
    algorithms: [ 'RS256' ],
    passthrough: true
  }));

  router.get('*', async ctx => {
    console.log(ctx.state)
    console.log(ctx.header.cookie)
    await handle(ctx.req, ctx.res)
    ctx.respond = false
  })

  server.use(async (ctx, next) => {
    ctx.res.statusCode = 200
    await next()
  })

  server.use(router.routes())
  server.listen(port, () => {
    console.log(`> Ready on http://localhost:${port}`)
  })
})

Только логически данные, с которыми я могу работать при первом запросе, являются файлами cookie. У меня есть только эти три .AspNetCore.Identity.Application (идентификатор токена), idsrv.session и CookieConsent.

Как использовать их для получения пользовательских данных? Для конечной точки информации пользователя требуется токен доступа, которого у меня нет, поскольку он хранится в sessionStorage на клиенте.

Должно быть, я что-то упускаю

...