This example project demonstrates how to leverage the Provide OAuth provider to allow users to delegate single-use API authorizations (e.g., bearer access tokens), to your product or platform, which can then be used to call, e.g., the Vault asymmetric signing API. Authorization is restricted to the requested and authorized scopes per RFC 6749.
Various Ident and Vault APIs are used as part of this example. The provide-js package is included in package.json
and is used by various Express endpoints.
Quickly build and run the OAuth backend example project:
- Install package dependencies:
npm install && npm start
- Start the Express server on port
3000
with required environment variables:
PRVD_API_ACCESS_TOKEN=<your bearer JWT> \
PRVD_OAUTH_CLIENT_ID=<client_id of your OAuth application; see Ident application id> \
PRVD_OAUTH_CLIENT_SECRET=<client_secret of your OAuth application; see Ident application OAuth config> \
npm start
Note: It is recommended to install and use the Provide CLI. All examples shown below using curl
are supported by the prvd
command.
OAuth applications are supported natively by Ident. You may create a new Application
or modify the configuration of one which exists to effectively enable OAuth support for authorization_code
grants.
To create an OAuth application in Ident, call this API, making sure to first generate the client_secret
out-of-band:
curl -v -XPOST -H 'authorization: bearer <your bearer JWT>' \
-H 'content-type: application/json' \
https://ident.provide.services/api/v1/applications -d \
'{
"name": "TxSigner™",
"config": {
"oauth": {
"name": "TxSigner™",
"authorize_uri": "https://ident.provide.services/api/v1/oauth/authorize",
"callback_uri": "http://localhost:3000/oauth/callback",
"client_secret": "<your generated client secret value>",
"branding": {
"authorize_logo_href": "https://assets.example.org/images/logo.png"
}
}
}
}'
Note: For the time being, users of the API must generate the client_secret
value which their OAuth applications will require when exchanging an authorized code
for the access_token
on behalf a consenting user.
A single-page frontend client application should redirect the user to the following URL:
http://localhost:8090/oauth/authorize?client_id=<OAuth client_id>
&scope=key.0d029b38-d360-11ec-a5ff-0bebd6292833.sign
&grant_type=authorization_code
&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Foauth%2Fcallback