New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@baoshan/auth-oauth-user-client

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@baoshan/auth-oauth-user-client

OAuth user authentication without exposing client secret

  • 0.1.7
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

auth-oauth-user-client.js

OAuth user authentication without exposing client secret

@latest Build Status

Table of contents

Backend service

auth-oauth-user-client.js requires a backend service to function. @octokit/oauth-app provides compatible Node.js/Express.js/Cloudflare Worker middlewares to support auth-oauth-user-client.js.

Standalone usage

Browsers

Load @octokit/auth-oauth-user-client directly from cdn.skypack.dev

<script type="module">
  import { createOAuthUserClientAuth } from "https://cdn.skypack.dev/@octokit/auth-oauth-user-client";
</script>

Node

Install with npm install @octokit/auth-oauth-user-client

const {
  createOAuthUserClientAuth,
} = require("@octokit/auth-oauth-user-client");
const auth = 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).
const session = await auth({ type: "getToken" });

// Use `signIn` command to redirect to GitHub when the user is not signed in.
if (!session) await auth({ type: "signIn" });
// `token` can be retrieved from a non-null `session`.
else console.log(session.authentication.token);

Usage with Octokit

Browsers

Load @octokit/auth-oauth-user-client and @octokit/core (or core-compatible module) directly from cdn.skypack.dev

<script type="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 npm install @octokit/core @octokit/auth-oauth-user-client. Optionally replace @octokit/core with a compatible module

const { Octokit } = require("@octokit/core");
const {
  createOAuthUserClientAuth,
} = require("@octokit/auth-oauth-user-client");
const octokit = new Octokit({
  authStrategy: createOAuthUserClientAuth,
  auth: {
    clientId: "clientId123",
    clientType: "github-app", // defaults to `"oauth-app"`
    expirationEnabled: true, // defaults to `true` for GitHub App, `false` for OAuth App
  },
});

const session = await octokit.auth();

// Use `signIn` command to redirect to GitHub when the user is not signed in.
if (!session) await octokit.auth({ type: "signIn" });
// Make GitHub API requests.
else {
  const { data } = await octokit.request("GET /user");
  console.log(data);
}

createOAuthUserClientAuth(options) or new Octokit({auth})

The createOAuthUserClientAuth method accepts a single options object as argument:

nametypedescription
clientIdstringRequired. Find Client ID on the app’s about page in settings.
clientTypestringEither "oauth-app" or "github-app". Defaults to "oauth-app".
expirationEnabledbooleanDefaults to true for GitHub App, false for OAuth App.
sessionobjectInitial session, defaults to null. See session object.
defaultScopesstringOnly relevant for OAuth App. See available scopes.
serviceOriginstringDefaults to location.origin. Required only when the @octokit/oauth-app Node.js/Express.js/Cloudflare middleware is deployed at a different origin.
servicePathPrefixstringDefaults to "/api/github/oauth". Required only when the @octokit/oauth-app Node.js/Express.js/Cloudflare middleware is created with custom pathPrefix.
authStoreobject or falseCustom store to get/set session object, false to disable session persistence. See custom store.
stateStoreobject or falseCustom store to get/set state string, false to disable state persistence.
requestfunctionYou can pass in your own @octokit/request instance. For usage with enterprise, set baseUrl to the API root endpoint. See custom request

Custom store

By default, auth-oauth-user-client.js uses localStorage to store JSON serialized session object and state string.

Pass authStore or stateStore in createOAuthUserClientAuth(options) (or new Octokit({auth})) to use your custom code to persist session or state.

For example:

const authStore = {
  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 */ }
  }
}

const auth = createOAuthUserClientAuth({
  clientId: "clientId123",
  authStore
});

Custom request

const { request } = require("@octokit/request");
createOAuthAppAuth({
  clientId: "1234567890abcdef1234",
  request: request.defaults({
    baseUrl: "https://ghe.my-company.com/api/v3",
  }),
});

auth(command)

The async auth() method returned by createOAuthUserClientAuth(options) accepts the following commands:

Command{type: }Optional Arguments
Sign in"signIn"
  • login: "user"
  • allowSignup: false
  • scopes: ["repo"] (only relevant for OAuth Apps)
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"

Session object

The async auth(options) method resolves to an object with the following properties:

propertytypedescription
authenticationobjectSee authentication object

Authentication object

There are three possible types of authentication object:

  1. OAuth APP authentication token
  2. GitHub APP user authentication token with expiring disabled
  3. GitHub APP user authentication token with expiring enabled

The differences are

  1. scopes is only present for OAuth Apps
  2. refreshToken, expiresAt, refreshTokenExpiresAt are only present for GitHub Apps, and only if token expiration is enabled

OAuth APP authentication token

nametypedescription
typestring"token"
tokenTypestring"oauth"
clientTypestring"oauth-app"
clientIdstringThe clientId from the strategy options
tokenstringThe user access token
scopesarray of stringsarray of scope names enabled for the token

GitHub APP user authentication token with expiring disabled

nametypedescription
typestring"token"
tokenTypestring"oauth"
clientTypestring"github-app"
clientIdstringThe clientId from the strategy options
tokenstringThe user access token

GitHub APP user authentication token with expiring enabled

nametypedescription
typestring"token"
tokenTypestring"oauth"
clientTypestring"github-app"
clientIdstringThe clientId from the strategy options
tokenstringThe user access token
refreshTokenstringThe refresh token
expiresAtstringDate timestamp in ISO 8601 standard. Example: 2022-01-01T08:00:0.000Z
refreshTokenExpiresAtstringDate timestamp in ISO 8601 standard. Example: 2022-01-01T08:00:0.000Z

auth.hook(request, route, parameters) or auth.hook(request, options)

auth.hook() hooks directly into the request life cycle. It amends the request to authenticate correctly based on the request URL.

The request option is an instance of @octokit/request. The route/options parameters are the same as for the request() method.

auth.hook() can be called directly to send an authenticated request

const { data: user } = await auth.hook(request, "GET /user");

Or it can be passed as option to request().

const requestWithAuth = request.defaults({ request: { hook: auth.hook } });
const { data: user } = await requestWithAuth("GET /user");

Contributing

See CONTRIBUTING.md

License

MIT

Keywords

FAQs

Package last updated on 10 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc