- Notifications
You must be signed in to change notification settings - Fork13
OAuth user authentication without exposing client secret
License
octokit/auth-oauth-user-client.js
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
OAuth user authentication without exposing client secret
Table of contents
auth-oauth-user-client.js
requires a backend service to function.@octokit/oauth-app
providescompatible Node.js/Express.js/Cloudflare Worker middlewares to supportauth-oauth-user-client.js
.
Browsers | Load <scripttype="module">import{createOAuthUserClientAuth}from"https://cdn.skypack.dev/@octokit/auth-oauth-user-client";</script> |
---|---|
Node | Install with const{ createOAuthUserClientAuth,}=require("@octokit/auth-oauth-user-client"); |
constauth=createOAuthUserClientAuth({clientId:"clientId123",clientType:"github-app",// defaults to `"oauth-app"`expirationEnabled:true,// defaults to `true` for GitHub App, `false` for OAuth App});// Get token from local session. Returns `null` when `code` or `state` search// parameters is missing and no session can be fetched from [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage).constsession=awaitauth({type:"getToken"});// Use `signIn` command to redirect to GitHub when the user is not signed in.if(!session)awaitauth({type:"signIn"});// `token` can be retrieved from a non-null `session`.elseconsole.log(session.authentication.token);
Browsers | Load <scripttype="module">import{Octokit}from"https://cdn.skypack.dev/@octokit/core";import{createOAuthUserClientAuth}from"https://cdn.skypack.dev/@octokit/auth-oauth-user-client";</script> |
---|---|
Node | Install with const{ Octokit}=require("@octokit/core");const{ createOAuthUserClientAuth,}=require("@octokit/auth-oauth-user-client"); |
constoctokit=newOctokit({authStrategy:createOAuthUserClientAuth,auth:{clientId:"clientId123",clientType:"github-app",// defaults to `"oauth-app"`expirationEnabled:true,// defaults to `true` for GitHub App, `false` for OAuth App},});constsession=awaitoctokit.auth();// Use `signIn` command to redirect to GitHub when the user is not signed in.if(!session)awaitoctokit.auth({type:"signIn"});// Make GitHub API requests.else{const{ data}=awaitoctokit.request("GET /user");console.log(data);}
ThecreateOAuthUserClientAuth
method accepts a singleoptions
object as argument:
name | type | description |
---|---|---|
clientId | string | Required . FindClient ID on the app’s about page in settings. |
clientType | string | Either"oauth-app" or"github-app" . Defaults to"oauth-app" . |
expirationEnabled | boolean | Defaults totrue for GitHub App,false for OAuth App. |
session | object | Initial session, defaults tonull . Seesession object. |
defaultScopes | string | Only relevant for OAuth App. Seeavailable scopes. |
serviceOrigin | string | Defaults tolocation.origin . Required only when the@octokit/oauth-app Node.js/Express.js/Cloudflare middleware is deployed at a different origin. |
servicePathPrefix | string | Defaults to"/api/github/oauth" . Required only when the@octokit/oauth-app Node.js/Express.js/Cloudflare middleware is created with custompathPrefix . |
sessionStore | object orfalse | Custom store to get/setsession object,false to disable session persistence. Seecustom store. |
stateStore | object orfalse | Custom store to get/setstate string,false to disable state persistence. |
request | function | You can pass in your own@octokit/request instance. For usage with enterprise, setbaseUrl to the API root endpoint. Seecustom request |
By default,auth-oauth-user-client.js
useslocalStorage
to store JSONserialized session object and state string.
PasssessionStore
orstateStore
increateOAuthUserClientAuth(options)
(ornew Octokit({auth})
) to use your custom code to persist session or state.
For example:
constsessionStore={get:async()=>{/* return local session or `null` when there is no session */}set:async(session)=>{if(session==null){/* delete local session */}else{/* create or update local session */}}}constauth=createOAuthUserClientAuth({clientId:"clientId123", sessionStore});
const{ request}=require("@octokit/request");createOAuthAppAuth({clientId:"1234567890abcdef1234",request:request.defaults({baseUrl:"https://ghe.my-company.com/api/v3",}),});
The asyncauth()
method returned bycreateOAuthUserClientAuth(options)
accepts the following commands:
Command | {type: } | Optional Arguments |
---|---|---|
Sign in | "signIn" |
|
Get (local) token | "getToken" | – |
Create an app token | "createToken" | – |
Check a token | "checkToken" | – |
Create a scoped access token (for OAuth App) | "createScopedToken" | – |
Reset a token | "resetToken" | – |
Renewing a user token with a refresh token (for GitHub App with token expiration enabled) | "refreshToken" | – |
Delete an app token (sign out) | "deleteToken" | offline: true (only deletes session from local session store) |
Delete an app authorization | "deleteAuthorization" | – |
The asyncauth(options)
method resolves to an object with the following properties:
property | type | description |
---|---|---|
authentication | object | Seeauthentication object |
There are three possible types of authentication object:
- OAuth APP authentication token
- GitHub APP user authentication token with expiring disabled
- GitHub APP user authentication token with expiring enabled
The differences are
scopes
is only present for OAuth AppsrefreshToken
,expiresAt
,refreshTokenExpiresAt
are only present for GitHub Apps, and only if token expiration is enabled
name | type | description |
---|---|---|
type | string | "token" |
tokenType | string | "oauth" |
clientType | string | "oauth-app" |
clientId | string | TheclientId from the strategy options |
token | string | The user access token |
scopes | array of strings | array of scope names enabled for the token |
name | type | description |
---|---|---|
type | string | "token" |
tokenType | string | "oauth" |
clientType | string | "github-app" |
clientId | string | TheclientId from the strategy options |
token | string | The user access token |
name | type | description |
---|---|---|
type | string | "token" |
tokenType | string | "oauth" |
clientType | string | "github-app" |
clientId | string | TheclientId from the strategy options |
token | string | The user access token |
refreshToken | string | The refresh token |
expiresAt | string | Date timestamp inISO 8601 standard. Example:2022-01-01T08:00:0.000Z |
refreshTokenExpiresAt | string | Date timestamp inISO 8601 standard. Example:2022-01-01T08:00:0.000Z |
auth.hook()
hooks directly into the request life cycle. It amends the request to authenticate correctly based on the request URL.
Therequest
option is an instance of@octokit/request
. Theroute
/options
parameters are the same as for therequest()
method.
auth.hook()
can be called directly to send an authenticated request
const{data:user}=awaitauth.hook(request,"GET /user");
Or it can be passed as option torequest()
.
constrequestWithAuth=request.defaults({request:{hook:auth.hook}});const{data:user}=awaitrequestWithAuth("GET /user");
About
OAuth user authentication without exposing client secret
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.