mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-08-28 02:46:09 +00:00
fix(ui): auth refresh token for confidential client type (#15654)
This commit is contained in:
parent
e22060668c
commit
4ddcc0375c
@ -23,8 +23,12 @@ import { logoutUser, renewToken } from '../../../rest/LoginAPI';
|
|||||||
|
|
||||||
export const GenericAuthenticator = forwardRef(
|
export const GenericAuthenticator = forwardRef(
|
||||||
({ children }: { children: ReactNode }, ref) => {
|
({ children }: { children: ReactNode }, ref) => {
|
||||||
const { setIsAuthenticated, setIsSigningIn, removeOidcToken } =
|
const {
|
||||||
useApplicationStore();
|
setIsAuthenticated,
|
||||||
|
setIsSigningIn,
|
||||||
|
removeOidcToken,
|
||||||
|
setOidcToken,
|
||||||
|
} = useApplicationStore();
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
|
||||||
const handleLogin = () => {
|
const handleLogin = () => {
|
||||||
@ -43,6 +47,7 @@ export const GenericAuthenticator = forwardRef(
|
|||||||
|
|
||||||
const handleSilentSignIn = async () => {
|
const handleSilentSignIn = async () => {
|
||||||
const resp = await renewToken();
|
const resp = await renewToken();
|
||||||
|
setOidcToken(resp.accessToken);
|
||||||
|
|
||||||
return Promise.resolve(resp);
|
return Promise.resolve(resp);
|
||||||
};
|
};
|
||||||
|
@ -316,7 +316,8 @@ export const AuthProvider = ({
|
|||||||
const startTokenExpiryTimer = () => {
|
const startTokenExpiryTimer = () => {
|
||||||
// Extract expiry
|
// Extract expiry
|
||||||
const { isExpired, timeoutExpiry } = extractDetailsFromToken(
|
const { isExpired, timeoutExpiry } = extractDetailsFromToken(
|
||||||
getOidcToken()
|
getOidcToken(),
|
||||||
|
clientType
|
||||||
);
|
);
|
||||||
const refreshToken = getRefreshToken();
|
const refreshToken = getRefreshToken();
|
||||||
|
|
||||||
|
@ -27,13 +27,19 @@ import {
|
|||||||
} from '../components/Auth/AuthProviders/AuthProvider.interface';
|
} from '../components/Auth/AuthProviders/AuthProvider.interface';
|
||||||
import { ROUTES } from '../constants/constants';
|
import { ROUTES } from '../constants/constants';
|
||||||
import { EMAIL_REG_EX } from '../constants/regex.constants';
|
import { EMAIL_REG_EX } from '../constants/regex.constants';
|
||||||
import { AuthenticationConfiguration } from '../generated/configuration/authenticationConfiguration';
|
import {
|
||||||
|
AuthenticationConfiguration,
|
||||||
|
ClientType,
|
||||||
|
} from '../generated/configuration/authenticationConfiguration';
|
||||||
import { AuthProvider } from '../generated/settings/settings';
|
import { AuthProvider } from '../generated/settings/settings';
|
||||||
import { isDev } from './EnvironmentUtils';
|
import { isDev } from './EnvironmentUtils';
|
||||||
|
|
||||||
export let msalInstance: IPublicClientApplication;
|
export let msalInstance: IPublicClientApplication;
|
||||||
|
|
||||||
export const EXPIRY_THRESHOLD_MILLES = 5 * 60 * 1000;
|
// 25s for server auth approch
|
||||||
|
export const EXPIRY_THRESHOLD_MILLES = 25 * 1000;
|
||||||
|
// 2 minutes for client auth approch
|
||||||
|
export const EXPIRY_THRESHOLD_MILLES_PUBLIC = 2 * 60 * 1000;
|
||||||
|
|
||||||
export const getRedirectUri = (callbackUrl: string) => {
|
export const getRedirectUri = (callbackUrl: string) => {
|
||||||
return isDev()
|
return isDev()
|
||||||
@ -298,7 +304,10 @@ export const getUrlPathnameExpiryAfterRoute = () => {
|
|||||||
* @timeoutExpiry time in ms for try to silent sign-in
|
* @timeoutExpiry time in ms for try to silent sign-in
|
||||||
* @returns exp, isExpired, diff, timeoutExpiry
|
* @returns exp, isExpired, diff, timeoutExpiry
|
||||||
*/
|
*/
|
||||||
export const extractDetailsFromToken = (token: string) => {
|
export const extractDetailsFromToken = (
|
||||||
|
token: string,
|
||||||
|
clientType = ClientType.Public
|
||||||
|
) => {
|
||||||
if (token) {
|
if (token) {
|
||||||
try {
|
try {
|
||||||
const { exp } = jwtDecode<JwtPayload>(token);
|
const { exp } = jwtDecode<JwtPayload>(token);
|
||||||
@ -310,12 +319,14 @@ export const extractDetailsFromToken = (token: string) => {
|
|||||||
isExpired: false,
|
isExpired: false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
const threshouldMillis =
|
||||||
|
clientType === ClientType.Public
|
||||||
|
? EXPIRY_THRESHOLD_MILLES_PUBLIC
|
||||||
|
: EXPIRY_THRESHOLD_MILLES;
|
||||||
|
|
||||||
const diff = exp && exp * 1000 - dateNow;
|
const diff = exp && exp * 1000 - dateNow;
|
||||||
const timeoutExpiry =
|
const timeoutExpiry =
|
||||||
diff && diff > EXPIRY_THRESHOLD_MILLES
|
diff && diff > threshouldMillis ? diff - threshouldMillis : 0;
|
||||||
? diff - EXPIRY_THRESHOLD_MILLES
|
|
||||||
: 0;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
exp,
|
exp,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user