https://github.com/optum/openid-client-server
An OpenId Relying Party (RP, Client) application server.
https://github.com/optum/openid-client-server
oauth2 openid openid-connect
Last synced: about 1 year ago
JSON representation
An OpenId Relying Party (RP, Client) application server.
- Host: GitHub
- URL: https://github.com/optum/openid-client-server
- Owner: Optum
- License: apache-2.0
- Created: 2020-07-20T13:43:25.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-07-18T23:17:02.000Z (almost 3 years ago)
- Last Synced: 2025-04-02T09:04:40.942Z (about 1 year ago)
- Topics: oauth2, openid, openid-connect
- Language: TypeScript
- Homepage:
- Size: 2.64 MB
- Stars: 5
- Watchers: 10
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: readme.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS.md
Awesome Lists containing this project
README
openid-client-server
An OpenId Relying Party (RP, Client) application server.
This module leverages the openid-client module to implement a web server that secures any Web UI framework that can be hosted by Node.js with Authorization Code Flow (optional Proof Key), Implicit Flow or Hybrid Flow. The module also provides configurable proxy endpoints that include the user token automatically in requests to API endpoints, as well a session management making it easier to create Web UI's that are "secure by default".
## Install
with npm
```console
$ npm install @optum/openid-client-server
```
with yarn
```console
$ yarn add @optum/openid-client-server
```
## Usage
### Options
The `resolveOptions` function will leverage environmental variables to auto-build all options with defaults. It can be required in the server setup module via `import {resolveOptions} from '@optum/openid-client-server`.
> For more info see the [.env.example](.env.example) file
### clientServer
Use the `clientServer` function to create a `http` server with an integrated [openid-client](https://www.npmjs.com/package/openid-client) and all features in [@optum/openid-client-server](https://www.npmjs.com/package/@optum/openid-client-server).
> With a Promise
```ts
import {IncomingMessage, ServerResponse} from 'http'
import {clientServer} from '@optum/openid-client-server'
import handle from 'serve-handler'
const port = parseInt(process.env.NEXT_SERVER_PORT ?? '8080', 10)
const serveHandler = async (
req: IncomingMessage,
res: ServerResponse
): Promise => {
handle(req, res, {
headers: [
{
source: '**/*.*',
headers: [
{
key: 'Cache-Control',
value: 'max-age=0'
}
]
}
]
})
}
clientServer({
contentHandler: serveHandler
})
.then(server =>
server.listen(port, () => {
console.log(`> Ready on http://localhost:${port}`)
})
)
.catch(error => {
console.log('Static content server failed to start')
console.error(error)
})
```
> With a Async Await
```ts
import {IncomingMessage, ServerResponse} from 'http'
import {clientServer} from '@optum/openid-client-server'
import handle from 'serve-handler'
const port = parseInt(process.env.NEXT_SERVER_PORT ?? '8080', 10)
;(async (): Promise => {
try {
const serveHandler = async (
req: IncomingMessage,
res: ServerResponse
): Promise => {
handle(req, res, {
headers: [
{
source: '**/*.*',
headers: [
{
key: 'Cache-Control',
value: 'max-age=0'
}
]
}
]
})
}
const server = await clientServer({contentHandler: serveHandler})
server.listen(port, () => {
console.log(`> Ready on http://localhost:${port}`)
})
} catch (error) {
console.log('Static content server failed to start')
console.error(error)
}
})()
```
> For a [Next.js](https://nextjs.org/) example, see: [examples/nextjs](./examples/nextjs) file
## Background
The original goal of this module was to provide as easy way to implement OpenID flows with [Next.js](https://nextjs.org/) applications via a [custom Next.js](https://nextjs.org/docs/advanced-features/custom-server) server. There were issues leveraging frameworks like [Koa.js](https://koajs.com/) for "easy wins" in session management and out-of-the-box middleware, so tides turned to using Node's core [`http`](https://nodejs.org/api/http.html) module. The result ended up working for any Web UI that could be served by Node.js, so here we are.
## Development
### Environment
-
Node.js is required to develop this module. Please install the latest LTS version if you haven't already.
-
Module dependencies are managed with Yarn. Please install it if you haven't already.
$ npm i -g yarn
### Editors
**VS Code**
- [Prettier - Code Formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
**IntelliJ**
- [Prettier](https://www.jetbrains.com/help/idea/prettier.html)