public function authorize(IRequest $request, IUser $user)
    {
        // resolve grant type for current request
        $grantType = $this->grantTypeResolver->resolve($request);

        if (!$grantType instanceof IAuthorizationGrantType) {
            throw new UnsupportedResponseTypeException;
        }

        return $grantType->authorize($request, $user);
    }