capacitor-community / generic-oauth2

Generic Capacitor OAuth 2 client plugin. Stop the war in Ukraine!
MIT License
223 stars 106 forks source link

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

Open IronManSastri opened 2 years ago

IronManSastri commented 2 years ago

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);
        });
};
svzi commented 2 years ago

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

IronManSastri commented 2 years ago

@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

NickyM commented 7 months ago

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.