generic-oauth2 icon indicating copy to clipboard operation
generic-oauth2 copied to clipboard

Not able to select different account while trying to login from mobile which is SSO enabled by @byteowls/capacitor-oauth2

Open IronManSastri opened this issue 3 years ago • 4 comments

Description

I have a react web app which is being converted to mobile app by using capacitor js. Have used @byteowls/capacitor-oauth2 for the sso part. while using on the web, user is being prompted to select the microsoft account, but on mobile(android and ios), its asking for the confirmation of the previous login. I tried to use prompt=select_account in the config but the plugin doesnt support that. I was able to override the plugin code to add the prompt. still I dont get the prompt dialogue on. mobile.

Any help would be grateful. Apologies for bad english. Thanks in advance.

Capacitor version:

"@byteowls/capacitor-oauth2": "3.0.1", "@capacitor-community/http": "1.2.0", "@capacitor/android": "3.2.2", "@capacitor/cli": "3.2.2", "@capacitor/core": "3.2.2", "@capacitor/ios": "3.2.2",

Your Plugin Configuration

const microsoftOAuthOptions = {
    appId: 'microsoftAppID',
    authorizationBaseUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
    accessTokenEndpoint: '',
    scope: 'openid',
    responseType: 'token',
    logsEnabled: true,
    web: {
        redirectUrl: 'microsoftRedirectionUrl',
    },
    android: {
        pkceEnabled: true,
        responseType: 'code',
        redirectUrl: 'com.xxxx.app://oauth/auth',
        accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
    },
    ios: {
        pkceEnabled: true,
        responseType: 'code',
        redirectUrl: 'com.xxxxx.app://oauth/auth',
        accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
    },
};

const onOAuthBtnClick = async () => {
    OAuth2Client.authenticate(microsoftOAuthOptions).then((response) => {
        let accessToken =
            response.access_token ||
            response.authorization_response ||
            response.access_token_response;

        if (typeof accessToken === 'string') {
            localStorage.setItem('accessToken', accessToken);
        } else {
            localStorage.setItem(
                'accessToken',
                accessToken.access_token || accessToken['/access_token']
            );
        }
        dispatch && dispatch(loginActions.IsUserLoggedIn(true));
        dispatch && dispatch(loginActions.loginLoader());
    });
};

const onLogoutClick = () => {

    OAuth2Client.logout(microsoftOAuthOptions)
        .then(() => {
            localStorage.clear();
            dispatch && dispatch(loginActions.IsUserLoggedIn(false));
        })
        .catch((reason) => {
            console.error('OAuth logout failed', reason);
        });
};

IronManSastri avatar Dec 22 '21 09:12 IronManSastri

@IronManSastri Have you been able to solve the issue? I'm experiencing the same right now...

svzi avatar Apr 26 '22 12:04 svzi

@svzi, sorry bro. i couldnt find the solution. I feel like its due to cache stored by logged in user by MS. if u find a solution pls do let me know

IronManSastri avatar Apr 27 '22 12:04 IronManSastri

A tiny bit late to the party, but the promp for user-selection at MIcrosoft, "&prompt=select_account" must be added to the querystring paramters of the redirecturi.

NickyM avatar Dec 05 '23 16:12 NickyM