public function interactiveGetAccessToken($reason = null, $redirectURL = null, $errorURL = null)
    {
        $redirectURL = (
            empty($redirectURL) ?
                $_SERVER['REQUEST_URI'] :
                $redirectURL
        );
        $errorURL = (
            empty($errorURL) ?
                DataUtilities::URLfromPath(__DIR__ . '/../error.php') :
                $errorURL
        );
        $canvas = $this->metadata['TOOL_CANVAS_API'];
        if (!empty($canvas['key']) && !empty($canvas['secret'])) {
            /* if so, request an API access token interactively */
            if (session_status() !== PHP_SESSION_ACTIVE) {
                session_start();
            }
            $_SESSION['oauth'] = [
                'purpose' => $this->metadata['TOOL_NAME'],
                'key' => $canvas['key'],
                'secret' => $canvas['secret']
            ];
            header(
                'Location: ' . DataUtilities::URLfromPath(__DIR__ . '/../oauth.php') .
                '?' . http_build_query([
                    'oauth-return' => $redirectURL,
                    'oauth-error' => $errorURL,
                    'reason' => $reason
                ])
            );
            return;
        } else { /* no (understandable) API credentials available -- doh! */
            throw new ConfigurationException(
                'Missing OAuth key/secret pair in configuration, which is ' .
                'required to interactively acquire an API access token',
                ConfigurationException::CANVAS_API_MISSING
            );
        }
    }