@equinor/mad-auth
v0.8.0
Published
An authentication library that uses expo-auth-session (mobile) and @azure/msal-browser (web) under the hood
Readme
MAD AUTH
A simple authentication package used by the mad-team. It uses expo-auth-session and @azure/msal-browser under the hood, and requires you to set up an app registration in azure.
Usage
Add our provided LoginButton to your application:
export const LoginScreen = () => {
const navigation = useNavigation<NavigationProp<RootStackParamList>>();
return (
<View
style={{
height: "100%",
alignItems: "center",
justifyContent: "center",
flexDirection: "row",
}}
>
<LoginButton
redirectUri="msauth.com.equinor.mad.chronicles://auth"
clientId="49222fe1-4e0a-4310-9e81-1a2c3eb9b2ed"
onAuthenticationSuccessful={() => navigation.navigate("Root")}
onAuthenticationFailed={() => console.error("Unable to authenticate")}
enableAutomaticAuthentication
/>
</View>
);
};The LoginButton provided by this package uses @equinor/mad-components's Button component. You
can style it however you want. However, if you want to create your own LoginButton from scratch,
you can do so by using the useAuthenticate hook. See the implementation of our LoginButton if
you need some inspiration. Alternatively, you can create the login flow logic from scratch using the
provided functions below.
This package provides a few basic functions you can use to either make your own login button, or use throughout the app.
For authenticated API requests that may prompt the user when silent authentication fails, use:
authenticate(
scopes: string[],
options?: { onAuthenticationCancelled?: () => void | Promise<void> },
): Promise<MadAuthenticationResult | null>Interactive fallback requests the supplied API scopes together with the OIDC scopes required to
maintain the authenticated session. On native platforms, the optional callback runs when the user
cancels or dismisses that interactive fallback, including through the authorization provider's
user-cancellation response. Authentication still resolves to null.
The lower-level functions below are intended for flows that explicitly require only one authentication mode.
If you are not using our login button, nor useAuthenticate, use this function to initate the
authentication client:
initiateAuthenticationClient({clientId: string, redirectUri: string, authority?: string}): Promise<void>To check if the authentication client exists, use this function:
authenticationClientExists(): booleanTo explicitly open interactive authentication, use this function:
authenticateInteractively(scope: string[]): Promise<MadAuthenticationResult | null>To authenticate without opening interactive UI, use this function:
authenticateSilently(scope: string[]): Promise<MadAuthenticationResult | null>To get account, use this function:
getAccount(): Promise<MadAccount | null>Alternatively, you can use this hook to get account:
useAccount(): MadAccount | null