react-pkce-oauth2
Version:
Plug-and-play react package for OAuth2 Authorization Code flow with PKCE
109 lines (86 loc) • 2.97 kB
Markdown
Plug-and-play react package for OAuth2 Authorization Code flow with PKCE
Adhering to the RFCs recommendations, cryptographically sound, and with **zero** dependencies!
Short version;
The modern and secure way to do authentication for mobile and web applications!
Long version;
<https://oauth.net/2/pkce/>
<https://datatracker.ietf.org/doc/html/rfc7636>
- Authorization server agnostic, works equally well with all OAuth2 auth servers following the OAuth2 spec
- Supports OpenID Connect (idTokens)
- Pre- and Post login callbacks
- Silently refreshes short lived access tokens in the background
- Decodes JWT's
## Example
```javascript
import React, { useContext } from 'react'
import ReactDOM from 'react-dom'
import { AuthContext, AuthProvider, TAuthConfig } from 'react-pkce-oauth2'
const authConfig: TAuthConfig = {
clientId: 'myClientID',
authorizationEndpoint: 'myAuthEndpoint',
tokenEndpoint: 'myTokenEndpoint',
// Whereever your application is running. Must match configuration on authorization server
redirectUri: 'http://localhost:3000/',
// Optional
scope: 'someScope openid',
// Optional
logoutEndpoint: '',
// Optional
logoutRedirect: '',
// Example to redirect back to original path after login has completed
preLogin: () => localStorage.setItem('preLoginPath', location.pathname),
postLogin: () => location.replace(localStorage.getItem('preLoginPath')),
// Wether or not to try and decode the access token.
// Stops errors from being printed in the console for non-JWT access tokens, etc. from Github
decodeToken: true,
// Indicates whether it should require the user to log in even if the user already has an active session.
prompt: true,
}
function LoginInfo() {
const { tokenData, token, idToken, logOut, error } = useContext(AuthContext)
return (
<>
{token ? (
<>
<div>
<h4>Access Token (JWT)</h4>
<pre>{token}</pre>
</div>
<div>
<h4>Login Information from Access Token (Base64 decoded JWT)</h4>
<pre>{JSON.stringify(tokenData, null, 2)}</pre>
</div>
</>
) : (
<div>You are not logged in</div>
)}
</>
)
}
ReactDOM.render(
<div>
<AuthProvider authConfig={authConfig}>
<LoginInfo />
</AuthProvider>
</div>,
document.getElementById('root')
)
```
The package is available on npmjs.com here; https://www.npmjs.com/package/react-pkce-oauth2
```bash
npm install react-pkce-oauth2
```
and import
```javascript
import { AuthContext, AuthProvider } from 'react-pkce-oauth2'
```
1. Update the 'authConfig' object in `src/index.js` with config from your authorization server and application
2. Install node_modules -> `$ yarn install`
3. Run -> `$ yarn start`
You are welcome to create issues and pull requests :)