react-routing-oidc
Version:
OIDC Client with React Routing
1 lines • 17.6 kB
Source Map (JSON)
{"version":3,"file":"index.modern.js","sources":["../src/utils/authConst.ts","../src/services/authService.ts","../src/providers/authProvider.tsx","../src/components/auth/Callback.tsx","../src/components/auth/Logout.tsx","../src/components/auth/LogoutCallback.tsx","../src/components/auth/SilentRenew.tsx","../src/routes/oidc-routes.tsx","../src/routes/PrivateRoute.tsx"],"sourcesContent":["import { UserManagerSettings, OidcMetadata } from 'oidc-client';\n\nexport const IDENTITY_CONFIG: UserManagerSettings = {\n authority: process.env.REACT_APP_AUTH_URL, //(string): The URL of the OIDC provider.\n client_id: process.env.REACT_APP_IDENTITY_CLIENT_ID, //(string): Your client application's identifier as registered with the OIDC provider.\n redirect_uri: process.env.REACT_APP_REDIRECT_URL, //The URI of your client application to receive a response from the OIDC provider.\n automaticSilentRenew: false, //(boolean, default: false): Flag to indicate if there should be an automatic attempt to renew the access token prior to its expiration.\n loadUserInfo: false, //(boolean, default: true): Flag to control if additional identity data is loaded from the user info endpoint in order to populate the user's profile.\n silent_redirect_uri: process.env.REACT_APP_SILENT_REDIRECT_URL, //(string): The URL for the page containing the code handling the silent renew.\n post_logout_redirect_uri: process.env.REACT_APP_LOGOFF_REDIRECT_URL, // (string): The OIDC post-logout redirect URI.\n response_type: 'id_token token', //(string, default: 'id_token'): The type of response desired from the OIDC provider.\n scope: 'openid profile', //(string, default: 'openid'): The scope being requested from the OIDC provider.\n};\n\nexport const METADATA_OIDC: Partial<OidcMetadata> = {\n issuer: process.env.REACT_APP_AUTH_URL as string,\n jwks_uri:\n process.env.REACT_APP_AUTH_URL + '/.well-known/openid-configuration/jwks',\n authorization_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/authorize',\n token_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/token',\n userinfo_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/userinfo',\n end_session_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/endsession',\n check_session_iframe:\n process.env.REACT_APP_AUTH_URL + '/connect/checksession',\n revocation_endpoint: process.env.REACT_APP_AUTH_URL + '/connect/revocation',\n introspection_endpoint:\n process.env.REACT_APP_AUTH_URL + '/connect/introspect',\n};\n","import { IDENTITY_CONFIG, METADATA_OIDC } from '../utils/authConst.js';\nimport { UserManager, WebStorageStateStore, Log } from 'oidc-client';\nimport { History } from 'history';\n\nexport default class AuthService {\n private UserManager?: UserManager;\n\n constructor() {\n this.UserManager = new UserManager({\n ...IDENTITY_CONFIG,\n userStore: new WebStorageStateStore({ store: window.sessionStorage }),\n metadata: {\n ...METADATA_OIDC,\n },\n });\n\n // Logger\n Log.logger = console;\n Log.level = Log.NONE;\n this.UserManager.events.addUserLoaded(() => {\n if (window.location.href.indexOf('signin-oidc') !== -1) {\n this.navigateToScreen && this.navigateToScreen();\n }\n });\n this.UserManager.events.addSilentRenewError((e) => {\n console.log('silent renew error', e.message);\n });\n\n this.UserManager.events.addAccessTokenExpired(() => {\n console.log('token expired');\n this.signinSilent && this.signinSilent();\n });\n }\n\n signinRedirectCallback = (history: History) => {\n console.log(this.UserManager);\n this.UserManager?.signinRedirectCallback().then(() => {\n history.push('/');\n });\n };\n\n getUser? = async () => {\n const user = await this.UserManager?.getUser();\n if (!user) {\n return await this.UserManager?.signinRedirectCallback();\n }\n return user;\n };\n\n parseJwt? = (token: string) => {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace('-', '+').replace('_', '/');\n return JSON.parse(window.atob(base64));\n };\n\n signinRedirect = () => {\n console.log('Why??');\n localStorage.setItem('redirectUri', window.location.pathname);\n this.UserManager?.signinRedirect({});\n };\n\n navigateToScreen? = () => {\n window.location.replace('/en/dashboard');\n };\n\n isAuthenticated = () => {\n const oidcStorage = JSON.parse(\n sessionStorage.getItem(\n `oidc.user:${process.env.REACT_APP_AUTH_URL}:${process.env.REACT_APP_IDENTITY_CLIENT_ID}`\n ) as string\n );\n\n return !!oidcStorage && !!oidcStorage.access_token;\n };\n\n signinSilent? = () => {\n this.UserManager?.signinSilent()\n .then((user) => {\n console.log('signed in', user);\n })\n .catch((err) => {\n this.signinRedirect();\n console.log(err);\n });\n };\n signinSilentCallback = () => {\n this.UserManager?.signinSilentCallback();\n };\n\n createSigninRequest = () => {\n return this.UserManager?.createSigninRequest();\n };\n\n logout = () => {\n this.UserManager?.signoutRedirect({\n id_token_hint: localStorage.getItem('id_token'),\n });\n this.UserManager?.clearStaleState();\n };\n\n signoutRedirectCallback = () => {\n this.UserManager?.signoutRedirectCallback().then(() => {\n localStorage.clear();\n window.location.replace(process.env.REACT_APP_PUBLIC_URL || '/');\n });\n this.UserManager?.clearStaleState();\n };\n}\n","/* /src/providers/authProvider.jsx */\n\nimport React, { Component } from 'react';\nimport AuthService from '../services/authService';\n\nexport const AuthContext = React.createContext<AuthService>(new AuthService());\n\nexport const AuthConsumer = AuthContext.Consumer;\n\nexport class AuthProvider extends Component {\n authService: AuthService;\n constructor(props: {}) {\n super(props);\n this.authService = new AuthService();\n }\n render() {\n return (\n <AuthContext.Provider value={this.authService}>\n {this.props.children}\n </AuthContext.Provider>\n );\n }\n}\n","import React from 'react';\nimport { AuthConsumer } from '../../providers/authProvider';\nimport { useHistory } from 'react-router-dom';\nimport { History } from 'history';\n\nexport const Callback = () => {\n const history: History = useHistory();\n return (\n <AuthConsumer>\n {({ signinRedirectCallback }) => {\n signinRedirectCallback && signinRedirectCallback(history);\n return <span>Loading...</span>;\n }}\n </AuthConsumer>\n );\n};\n","import React from 'react';\nimport { AuthConsumer } from '../../providers/authProvider';\n\nexport const Logout = () => (\n <AuthConsumer>\n {({ logout }) => {\n logout && logout();\n return <span>loading</span>;\n }}\n </AuthConsumer>\n);\n","import React from 'react';\nimport { AuthConsumer } from '../../providers/authProvider';\n\nexport const LogoutCallback = () => (\n <AuthConsumer>\n {({ signoutRedirectCallback }) => {\n signoutRedirectCallback && signoutRedirectCallback();\n return <span>loading</span>;\n }}\n </AuthConsumer>\n);\n","import React from 'react';\nimport { AuthConsumer } from '../../providers/authProvider';\nexport const SilentRenew = () => (\n <AuthConsumer>\n {({ signinSilentCallback }) => {\n signinSilentCallback && signinSilentCallback();\n return <span>loading</span>;\n }}\n </AuthConsumer>\n);\n","import React from 'react'\nimport { Route, Switch } from 'react-router-dom';\n\nimport { Callback } from '../components/auth/Callback';\nimport { Logout } from '../components/auth/Logout';\nimport { LogoutCallback } from '../components/auth/LogoutCallback';\nimport { SilentRenew } from '../components/auth/SilentRenew';\n\n\n// export const OidRoutes = (\n// <Switch>\n// <Route exact={true} path='/assets/signin-callback.html' component={Callback}/>\n// <Route exact={true} path='/logout' component={Logout} />\n// <Route exact={true} path='/logout/callback' component={LogoutCallback} />\n// <Route exact={true} path='/assets/silent-callback.html' component={SilentRenew} />\n// </Switch>\n// );\n\nexport const OidRoutes = ( props: {match: {url: string}} ) => {\n console.log(props.match);\n return(\n <Switch>\n <Route exact={true} path={`${props.match.url}assets/signin-callback.html`} component={Callback}/>\n <Route exact={true} path={`${props.match.url}logout`} component={Logout} />\n <Route exact={true} path={`${props.match.url}logout/callback`} component={LogoutCallback} />\n <Route exact={true} path={`${props.match.url}assets/silent-callback.html`} component={SilentRenew} />\n </Switch>\n );\n};","/* /src/routes/privateRoute.jsx */\nimport React from 'react';\nimport { Route, RouteProps } from 'react-router-dom';\nimport { AuthConsumer } from '../providers/authProvider';\n\ntype ComponentType = RouteProps['component'];\n\nexport const PrivateRoute: React.FC<RouteProps> = ({\n component,\n ...rest\n}: RouteProps) => {\n const renderFn = (Component: ComponentType) => (props: RouteProps) => (\n <AuthConsumer>\n {({ isAuthenticated, signinRedirect }) => {\n console.log('???');\n if (!!Component && isAuthenticated && isAuthenticated()) {\n return React.createElement(Component, props);\n } else {\n signinRedirect && signinRedirect();\n return <span>loading mm</span>;\n }\n }}\n </AuthConsumer>\n );\n\n return <Route {...rest} render={renderFn(component)} />;\n};\n"],"names":["IDENTITY_CONFIG","authority","process","env","REACT_APP_AUTH_URL","client_id","REACT_APP_IDENTITY_CLIENT_ID","redirect_uri","REACT_APP_REDIRECT_URL","automaticSilentRenew","loadUserInfo","silent_redirect_uri","REACT_APP_SILENT_REDIRECT_URL","post_logout_redirect_uri","REACT_APP_LOGOFF_REDIRECT_URL","response_type","scope","METADATA_OIDC","issuer","jwks_uri","authorization_endpoint","token_endpoint","userinfo_endpoint","end_session_endpoint","check_session_iframe","revocation_endpoint","introspection_endpoint","AuthService","history","console","log","UserManager","signinRedirectCallback","then","push","getUser","user","token","base64Url","split","base64","replace","JSON","parse","window","atob","localStorage","setItem","location","pathname","signinRedirect","oidcStorage","sessionStorage","getItem","access_token","signinSilent","err","signinSilentCallback","createSigninRequest","signoutRedirect","id_token_hint","clearStaleState","signoutRedirectCallback","clear","REACT_APP_PUBLIC_URL","userStore","WebStorageStateStore","store","metadata","Log","logger","level","NONE","events","addUserLoaded","href","indexOf","navigateToScreen","addSilentRenewError","e","message","addAccessTokenExpired","AuthContext","React","createContext","AuthConsumer","Consumer","AuthProvider","props","authService","render","Provider","value","children","Component","Callback","useHistory","Logout","logout","LogoutCallback","SilentRenew","OidRoutes","match","Switch","Route","exact","path","url","component","PrivateRoute","rest","renderFn","isAuthenticated","createElement"],"mappings":"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"}