diff --git a/aad-sso-wordpress.php b/aad-sso-wordpress.php index f4ff88d..9ae1042 100644 --- a/aad-sso-wordpress.php +++ b/aad-sso-wordpress.php @@ -309,6 +309,29 @@ function authenticate( $user, $username, $password ) { // Of the AAD groups defined in the settings, get only those where the user is a member $group_ids = array_keys( $this->settings->aad_group_to_wp_role_map ); $group_memberships = AADSSO_GraphHelper::user_check_member_groups( $jwt->oid, $group_ids ); + + // Validate response to throw an early error if unable to check group membership. + if ( isset( $group_memberships->value ) ) { + AADSSO::debug_log( sprintf( + 'Azure AD user \'%s\' is a member of [%s]', + $jwt->oid, implode( ',', $group_memberships->value ) ), 20 + ); + } elseif ( isset ( $group_memberships->{'odata.error'} ) ) { + AADSSO::debug_log( 'Error when checking group membership: ' . json_encode( $group_memberships ) ); + return new WP_Error( + 'error_checking_group_membership', + sprintf( + __( 'ERROR: Unable to check group membership in Azure AD: %s.', + 'aad-sso-wordpress' ), $group_memberships->{'odata.error'}->code ) + ); + } else { + AADSSO::debug_log( 'Unexpected response to checkMemberGroups: ' . json_encode( $group_memberships ) ); + return new WP_Error( + 'unexpected_response_to_checkMemberGroups', + __( 'ERROR: Unexpected response when checking group membership in Azure AD.', + 'aad-sso-wordpress' ) + ); + } } // Invoke any configured matching and auto-provisioning strategy and get the user. We include @@ -456,29 +479,6 @@ function get_wp_user_from_aad_user( $jwt, $group_memberships ) { * @return WP_User|WP_Error Return the WP_User with updated roles, or WP_Error if failed. */ function update_wp_user_roles( $user, $group_memberships ) { - - // Check for errors in the group membership check response - if ( isset( $group_memberships->value ) ) { - AADSSO::debug_log( sprintf( - 'User \'%s\' is a member of [%s]', - $user->ID, implode( ',', $group_memberships->value ) ), 20 - ); - } elseif ( isset ( $group_memberships->{'odata.error'} ) ) { - AADSSO::debug_log( 'Error when checking group membership: ' . json_encode( $group_memberships ) ); - return new WP_Error( - 'error_checking_group_membership', - sprintf( - __( 'ERROR: Unable to check group membership in Azure AD: %s.', - 'aad-sso-wordpress' ), $group_memberships->{'odata.error'}->code ) - ); - } else { - AADSSO::debug_log( 'Unexpected response to checkMemberGroups: ' . json_encode( $group_memberships ) ); - return new WP_Error( - 'unexpected_response_to_checkMemberGroups', - __( 'ERROR: Unexpected response when checking group membership in Azure AD.', - 'aad-sso-wordpress' ) - ); - } // Determine which WordPress role the AAD group corresponds to. $roles_to_set = array();