QAbstractOAuth2 Class
La classe QAbstractOAuth2 est la base de toutes les implémentations des méthodes d'authentification OAuth 2. Plus d'informations...
| En-tête : | #include <QAbstractOAuth2> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth) |
| qmake : | QT += networkauth |
| Hérite : | QAbstractOAuth |
| Héritée par : | QOAuth2AuthorizationCodeFlow et QOAuth2DeviceAuthorizationFlow |
Types publics
(since 6.9) enum class | NonceMode { Automatic, Enabled, Disabled } |
Propriétés
|
|
Fonctions publiques
| QAbstractOAuth2(QObject *parent = nullptr) | |
| QAbstractOAuth2(QNetworkAccessManager *manager, QObject *parent = nullptr) | |
| virtual | ~QAbstractOAuth2() |
| bool | autoRefresh() const |
| void | clearNetworkRequestModifier() |
| QString | clientIdentifierSharedKey() const |
| virtual QUrl | createAuthenticatedUrl(const QUrl &url, const QVariantMap ¶meters = QVariantMap()) |
| QDateTime | expirationAt() const |
| QSet<QByteArray> | grantedScopeTokens() const |
| QString | idToken() const |
| QString | nonce() const |
| QAbstractOAuth2::NonceMode | nonceMode() const |
| std::chrono::seconds | refreshLeadTime() const |
| QString | refreshToken() const |
| QSet<QByteArray> | requestedScopeTokens() const |
| QString | responseType() const |
| QString | scope() const |
| void | setAutoRefresh(bool enable) |
| void | setClientIdentifierSharedKey(const QString &clientIdentifierSharedKey) |
(since 6.9) void | setNetworkRequestModifier(const QAbstractOAuth2::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| void | setNonce(const QString &nonce) |
| void | setNonceMode(QAbstractOAuth2::NonceMode mode) |
| void | setRefreshLeadTime(std::chrono::seconds leadTime) |
| void | setRefreshToken(const QString &refreshToken) |
| void | setRequestedScopeTokens(const QSet<QByteArray> &tokens) |
| void | setScope(const QString &scope) |
(since 6.5) void | setSslConfiguration(const QSslConfiguration &configuration) |
| void | setState(const QString &state) |
| void | setTokenUrl(const QUrl &tokenUrl) |
| void | setUserAgent(const QString &userAgent) |
(since 6.5) QSslConfiguration | sslConfiguration() const |
| QString | state() const |
| QUrl | tokenUrl() const |
| QString | userAgent() const |
Fonctions publiques réimplémentées
(deprecated in 6.11) virtual QNetworkReply * | deleteResource(const QUrl &url, const QVariantMap ¶meters = QVariantMap()) override |
(deprecated in 6.11) virtual QNetworkReply * | get(const QUrl &url, const QVariantMap ¶meters = QVariantMap()) override |
(deprecated in 6.11) virtual QNetworkReply * | head(const QUrl &url, const QVariantMap ¶meters = QVariantMap()) override |
(deprecated in 6.11) virtual QNetworkReply * | post(const QUrl &url, const QVariantMap ¶meters = QVariantMap()) override |
| virtual void | prepareRequest(QNetworkRequest *request, const QByteArray &verb, const QByteArray &body = QByteArray()) override |
(deprecated in 6.11) virtual QNetworkReply * | put(const QUrl &url, const QVariantMap ¶meters = QVariantMap()) override |
Emplacements publics
(since 6.9) void | refreshTokens() |
Signaux
(since 6.9) void | accessTokenAboutToExpire() |
| void | authorizationCallbackReceived(const QVariantMap &data) |
| void | autoRefreshChanged(bool enable) |
| void | clientIdentifierSharedKeyChanged(const QString &clientIdentifierSharedKey) |
(until 6.13) void | error(const QString &error, const QString &errorDescription, const QUrl &uri) |
| void | expirationAtChanged(const QDateTime &expiration) |
| void | grantedScopeTokensChanged(const QSet<QByteArray> &tokens) |
| void | idTokenChanged(const QString &idToken) |
| void | nonceChanged(const QString &nonce) |
| void | nonceModeChanged(QAbstractOAuth2::NonceMode mode) |
| void | refreshLeadTimeChanged(std::chrono::seconds leadTime) |
| void | refreshTokenChanged(const QString &refreshToken) |
| void | requestedScopeTokensChanged(const QSet<QByteArray> &tokens) |
| void | scopeChanged(const QString &scope) |
(since 6.9) void | serverReportedErrorOccurred(const QString &error, const QString &errorDescription, const QUrl &uri) |
(since 6.5) void | sslConfigurationChanged(const QSslConfiguration &configuration) |
| void | stateChanged(const QString &state) |
| void | tokenUrlChanged(const QUrl &tokenUrl) |
| void | userAgentChanged(const QString &userAgent) |
Emplacements protégés
(since 6.9) void | refreshTokensImplementation() |
Description détaillée
Cette classe définit l'interface de base des classes d'authentification OAuth 2. En héritant de cette classe, vous pouvez créer des méthodes d'authentification personnalisées utilisant le standard OAuth 2 pour différents services web.
Une description du fonctionnement d'OAuth 2 peut être trouvée dans : Le cadre d'autorisation OAuth 2.0
Documentation sur les types de membres
[since 6.9] enum class QAbstractOAuth2::NonceMode
Liste des modes nonce disponibles.
| Constante | Valeur | Description |
|---|---|---|
QAbstractOAuth2::NonceMode::Automatic | 0 | Le nonce est envoyé si l'adresse requested scope contient openid. Il s'agit du mode par défaut, qui envoie nonce uniquement lorsque cela est pertinent pour les flux d'authentification de l'OIDC. |
QAbstractOAuth2::NonceMode::Enabled | 1 | Le nonce est envoyé pendant la phase d'autorisation. |
QAbstractOAuth2::NonceMode::Disabled | 2 | La nonce n'est pas envoyée pendant la phase d'autorisation. |
Cette énumération a été introduite dans Qt 6.9.
Voir aussi nonce et OAuth 2.0 Overview.
Documentation sur les propriétés
[since 6.9] autoRefresh : bool
Cette propriété active ou désactive le rafraîchissement automatique du jeton d'accès.
Cette propriété active ou désactive le rafraîchissement automatique du jeton d'accès. Ceci est utile pour les applications qui requièrent une autorisation ininterrompue sans intervention de l'utilisateur.
Si cette propriété vaut true, refreshTokens() sera automatiquement appelé lorsque le jeton est sur le point d'expirer et qu'il existe un refreshToken valide.
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| bool | autoRefresh() const |
| void | setAutoRefresh(bool enable) |
Signal Notifier :
| void | autoRefreshChanged(bool enable) |
Voir aussi refreshLeadTime et accessTokenAboutToExpire().
clientIdentifierSharedKey : QString
Cette propriété contient la clé partagée du client utilisée comme mot de passe si le serveur exige une authentification pour demander le jeton.
Fonctions d'accès :
| QString | clientIdentifierSharedKey() const |
| void | setClientIdentifierSharedKey(const QString &clientIdentifierSharedKey) |
Signal de notification :
| void | clientIdentifierSharedKeyChanged(const QString &clientIdentifierSharedKey) |
[read-only] expiration : QDateTime
Cette propriété contient l'heure d'expiration du jeton d'accès actuel. Une valeur non valide signifie que le serveur d'autorisation n'a pas fourni d'heure d'expiration valide.
Fonctions d'accès :
| QDateTime | expirationAt() const |
Signal Notificateur :
| void | expirationAtChanged(const QDateTime &expiration) |
Voir aussi QDateTime::isValid().
[read-only, since 6.9] grantedScopeTokens : QSet<QByteArray>
Cette propriété contient l'étendue accordée par le serveur d'autorisation.
L'étendue demandée et l'étendue accordée peuvent être différentes. L'utilisateur final peut avoir choisi de n'accorder qu'un sous-ensemble de l'étendue, ou les politiques côté serveur peuvent la modifier. L'application doit être préparée à gérer ce scénario et vérifier l'étendue accordée pour voir si elle doit avoir un impact sur la logique de l'application.
Le serveur peut omettre d'indiquer la portée accordée, comme le définit la RFC 6749. Dans ce cas, l'implémentation suppose que la portée accordée est la même que la portée demandée.
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| QSet<QByteArray> | grantedScopeTokens() const |
Notifier signal :
| void | grantedScopeTokensChanged(const QSet<QByteArray> &tokens) |
Voir aussi QAbstractOAuth2::requestedScopeTokens.
[read-only, since 6.9] idToken : QString
Cette propriété contient le jeton d'identification OpenID Connect reçu.
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| QString | idToken() const |
Notifier signal :
| void | idTokenChanged(const QString &idToken) |
Voir aussi NonceMode, nonce, et Qt OpenID Connect Support.
[since 6.9] nonce : QString
Cette propriété contient la chaîne de caractères envoyée au serveur lors de l'authentification. Le nonce est utilisé pour associer les réponses des jetons applicables (OpenID Connect id_token en particulier) à l'étape d'autorisation.
L'objectif principal de nonce est d'atténuer les attaques par rejeu. Il garantit que les réponses aux jetons reçues correspondent aux demandes d'authentification initiées par l'application, empêchant ainsi les attaquants de réutiliser les jetons dans des contextes non autorisés. Il est donc important d'inclure la vérification du nonce dans la validation du jeton.
En pratique, les fournisseurs de serveurs d'autorisation peuvent refuser la demande OpenID Connect si un nonce n'est pas fourni dans la demande d'autorisation.
Le jeton lui-même est une chaîne opaque et ne doit contenir que des caractères compatibles avec les URL pour une compatibilité maximale. De plus, le jeton doit fournir une entropie adéquate afin qu'il soit impossible à deviner pour les attaquants. Il n'y a pas de limites strictes pour la taille des nonce, et les fournisseurs de serveurs d'autorisation peuvent imposer leurs propres tailles minimales et maximales.
Bien que l'adresse nonce puisse être définie manuellement, les classes Qt génèrent un nonce de 32 caractères when needed s'il n'y en a pas.
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| QString | nonce() const |
| void | setNonce(const QString &nonce) |
Signal Notifier :
| void | nonceChanged(const QString &nonce) |
Voir aussi nonceMode et Qt OpenID Connect Support.
[since 6.9] nonceMode : NonceMode
Cette propriété contient le mode nonce actuel (utilisation ou non du nonce).
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| QAbstractOAuth2::NonceMode | nonceMode() const |
| void | setNonceMode(QAbstractOAuth2::NonceMode mode) |
Signal Notifier :
| void | nonceModeChanged(QAbstractOAuth2::NonceMode mode) |
Voir aussi NonceMode et nonce.
[since 6.9] refreshLeadTime : std::chrono::seconds
Cette propriété définit le délai d'émission du signal accessTokenAboutToExpire() par rapport à l'expiration du jeton d'accès.
Cette propriété spécifie l'intervalle de temps (en secondes) avant l'expiration du jeton d'accès actuel, lorsque le signal accessTokenAboutToExpire() est émis. La valeur définie pour cette propriété doit être une durée positive.
Cet intervalle permet à l'application de rafraîchir le jeton bien à l'avance, ce qui garantit une autorisation continue sans interruption.
Si cette propriété n'est pas explicitement définie ou si le leadTime fourni est supérieur à la durée de vie du jeton, le leadTime est fixé par défaut à 5 % de la durée de vie restante du jeton, mais pas moins de 10 secondes avant l'expiration (ce qui laisse le temps à la demande de rafraîchissement de se terminer).
Remarque : le signal d'expiration ne fonctionne que si le serveur d'autorisation a fourni un délai d'expiration approprié.
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| std::chrono::seconds | refreshLeadTime() const |
| void | setRefreshLeadTime(std::chrono::seconds leadTime) |
Signal Notificateur :
| void | refreshLeadTimeChanged(std::chrono::seconds leadTime) |
Voir aussi autoRefresh.
refreshToken : QString
Cette propriété contient le jeton de rafraîchissement utilisé pour obtenir de nouveaux jetons d'accès.
Les jetons de rafraîchissement ont généralement une durée de vie plus longue que les jetons d'accès, il est donc logique de les conserver pour une utilisation ultérieure.
Fonctions d'accès :
| QString | refreshToken() const |
| void | setRefreshToken(const QString &refreshToken) |
Signal du notificateur :
| void | refreshTokenChanged(const QString &refreshToken) |
Voir aussi setRefreshToken().
[since 6.9] requestedScopeTokens : QSet<QByteArray>
Cette propriété contient l'étendue souhaitée qui définit les autorisations demandées par le client.
Remarque : les jetons d'étendue sont limités à un sous-ensemble de caractères US-ASCII imprimables. L'utilisation de caractères en dehors de cette plage n'est pas prise en charge.
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| QSet<QByteArray> | requestedScopeTokens() const |
| void | setRequestedScopeTokens(const QSet<QByteArray> &tokens) |
Signal Notifier :
| void | requestedScopeTokensChanged(const QSet<QByteArray> &tokens) |
Voir aussi QAbstractOAuth2::grantedScopeTokens.
[until 6.13] scope : QString
Cette propriété sera obsolète à partir de la version 6.13.
Utilisez plutôt les propriétés requestedScopeTokens et grantedScopeTokens. Cette propriété sera supprimée dans Qt 7.
Cette propriété contient l'étendue souhaitée qui définit les autorisations demandées par le client.
La valeur de l'étendue est mise à jour en fonction de la valeur de l'étendue accordée par le serveur d'autorisation. Dans le cas d'une réponse vide, l'étendue demandée est considérée comme accordée et ne change pas.
Le fait que cette propriété joue deux rôles différents, d'abord en tant que champ d'application demandé et ensuite en tant que champ d'application accordé, est un artefact historique. Il est recommandé à tout nouveau code d'utiliser QAbstractOAuth2::requestedScopeTokens et QAbstractOAuth2::grantedScopeTokens.
Fonctions d'accès :
| QString | scope() const |
| void | setScope(const QString &scope) |
Notifier signal :
| void | scopeChanged(const QString &scope) |
Voir également QAbstractOAuth2::grantedScopeTokens et QAbstractOAuth2::requestedScopeTokens.
state : QString
Cette propriété contient la chaîne de caractères envoyée au serveur lors de l'authentification. L'état est utilisé pour identifier et valider la demande lors de la réception du rappel.
Certains caractères sont illégaux dans l'élément state (voir RFC 6749). L'utilisation de caractères illégaux peut conduire à une inadéquation involontaire de l'état et à l'échec de l'autorisation OAuth 2. Par conséquent, si vous essayez de définir une valeur qui contient des caractères illégaux, l'état est ignoré et un avertissement est enregistré.
Fonctions d'accès :
| QString | state() const |
| void | setState(const QString &state) |
Signal de notification :
| void | stateChanged(const QString &state) |
[since 6.9] tokenUrl : QUrl
Cette propriété contient l'URL du point de terminaison du jeton qui est utilisé pour obtenir des jetons. En fonction du cas d'utilisation et du support du serveur d'autorisation, ces jetons peuvent être des jetons d'accès, des jetons de rafraîchissement et des jetons d'identification.
Les jetons sont généralement récupérés une fois l'étape d'autorisation terminée, et le point de terminaison du jeton peut également être utilisé pour rafraîchir les jetons si nécessaire.
Par exemple, QOAuth2AuthorizationCodeFlow utilise cette url pour émettre une demande de jeton d'accès, et QOAuth2DeviceAuthorizationFlow utilise cette url pour demander un jeton d'accès.
Cette propriété a été introduite dans Qt 6.9.
Fonctions d'accès :
| QUrl | tokenUrl() const |
| void | setTokenUrl(const QUrl &tokenUrl) |
Notifier signal :
| void | tokenUrlChanged(const QUrl &tokenUrl) |
userAgent : QString
Cette propriété contient l'en-tête User-Agent utilisé pour créer les requêtes réseau.
La valeur par défaut est "QtOAuth/1.0 (+https://www.qt.io)".
Fonctions d'accès :
| QString | userAgent() const |
| void | setUserAgent(const QString &userAgent) |
Signal Notificateur :
| void | userAgentChanged(const QString &userAgent) |
Member Function Documentation
[explicit] QAbstractOAuth2::QAbstractOAuth2(QObject *parent = nullptr)
Construit un objet QAbstractOAuth2 en utilisant parent comme parent.
[explicit] QAbstractOAuth2::QAbstractOAuth2(QNetworkAccessManager *manager, QObject *parent = nullptr)
Construit un objet QAbstractOAuth2 en utilisant parent comme parent et définit manager comme gestionnaire d'accès au réseau.
[virtual noexcept] QAbstractOAuth2::~QAbstractOAuth2()
Détruit l'instance QAbstractOAuth2.
[signal, since 6.9] void QAbstractOAuth2::accessTokenAboutToExpire()
Ce signal est émis lorsque le jeton d'accès est sur le point d'expirer.
Pour que ce signal soit émis, il faut que le jeton d'accès ait une date d'expiration valide. Une alternative à la gestion manuelle de ce signal est d'utiliser autoRefresh.
Cette fonction a été introduite dans Qt 6.9.
Voir aussi refreshLeadTime, autoRefresh, et refreshTokens().
[signal] void QAbstractOAuth2::authorizationCallbackReceived(const QVariantMap &data)
Signal émis lorsque le serveur de réponse reçoit le rappel d'autorisation du serveur : data contient les valeurs reçues du serveur.
void QAbstractOAuth2::clearNetworkRequestModifier()
Efface le modificateur de demande de réseau.
Voir aussi setNetworkRequestModifier().
[virtual invokable] QUrl QAbstractOAuth2::createAuthenticatedUrl(const QUrl &url, const QVariantMap ¶meters = QVariantMap())
L'URL renvoyée est basée sur url, en la combinant avec parameters et le jeton d'accès.
Note : Cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
[signal, until 6.13] void QAbstractOAuth2::error(const QString &error, const QString &errorDescription, const QUrl &uri)
Cette fonction sera obsolète à partir de la version 6.13.
Utilisez serverReportedErrorOccurred à la place
Signal émis lorsque le serveur répond à la demande d'autorisation par une erreur telle que définie dans la RFC 6749 error response.
error est le nom de l'erreur ; errorDescription décrit l'erreur et uri est un URI facultatif contenant plus d'informations sur l'erreur.
Voir aussi QAbstractOAuth::requestFailed() et QAbstractOAuth2::serverReportedErrorOccurred().
[override virtual] void QAbstractOAuth2::prepareRequest(QNetworkRequest *request, const QByteArray &verb, const QByteArray &body = QByteArray())
Réimplémente : QAbstractOAuth::prepareRequest(QNetworkRequest *request, const QByteArray &verb, const QByteArray &body).
QString QAbstractOAuth2::refreshToken() const
Obtient le jeton de rafraîchissement actuel.
Les jetons de rafraîchissement ont généralement une durée de vie plus longue que les jetons d'accès, il est donc judicieux de les conserver pour une utilisation ultérieure.
Renvoie le jeton de rafraîchissement actuel ou une chaîne vide s'il n'y a pas de jeton de rafraîchissement disponible.
Note : Fonction Getter pour la propriété refreshToken.
Voir également setRefreshToken().
[slot, since 6.9] void QAbstractOAuth2::refreshTokens()
Appelez cette fonction pour rafraîchir les jetons. La fonction appelle refreshTokensImplementation() pour effectuer le rafraîchissement proprement dit.
Cette fonction a été introduite dans Qt 6.9.
Voir aussi refreshTokensImplementation() et autoRefresh.
[protected slot, since 6.9] void QAbstractOAuth2::refreshTokensImplementation()
Ce slot est appelé par refreshTokens() pour envoyer la demande de rafraîchissement du jeton.
Les classes dérivées doivent réimplémenter ce slot pour prendre en charge le rafraîchissement des jetons :
class MyClass : public QAbstractOAuth2 { ...protected Q_SLOTS : void refreshTokensImplementation() QT7_ONLY(override) ; } ;void MyClass::refreshTokensImplementation(){ qDebug("refresh"); }
Cette fonction a été introduite dans Qt 6.9.
Voir aussi autoRefresh et accessTokenAboutToExpire().
QString QAbstractOAuth2::responseType() const
Renvoie le type de réponse utilisé.
[signal, since 6.9] void QAbstractOAuth2::serverReportedErrorOccurred(const QString &error, const QString &errorDescription, const QUrl &uri)
Signal émis lorsque le serveur répond à la demande d'autorisation par une erreur telle que définie dans la RFC 6749 error response.
error est le nom de l'erreur ; errorDescription décrit l'erreur et uri est un URI facultatif contenant plus d'informations sur l'erreur.
Pour attraper toutes les erreurs, y compris celles définies par la RFC, avec un seul signal, utilisez QAbstractOAuth::requestFailed().
Cette fonction a été introduite dans Qt 6.9.
[since 6.9] template <typename Functor, QAbstractOAuth2::if_compatible_callback<Functor> = true> void QAbstractOAuth2::setNetworkRequestModifier(const QAbstractOAuth2::ContextTypeForFunctor<Functor> *context, Functor &&callback)
Définit la fonction de modification des demandes de réseau sur callback. Cette fonction est utilisée pour personnaliser les demandes de réseau envoyées au serveur.
callback doit implémenter la signature void(QNetworkRequest&, QAbstractOAuth::Stage). L'adresse QNetworkRequest fournie peut être modifiée directement et est utilisée juste après la fin du rappel. callback peut être un pointeur de fonction, une lambda, une fonction membre ou tout autre objet pouvant être appelé. L'adresse QAbstractOAuth::Stage fournie peut être utilisée pour vérifier à quelle étape la demande se rapporte (demande de jeton, demande de rafraîchissement de jeton ou demande d'autorisation dans le cas de QOAuth2DeviceAuthorizationFlow).
context contrôle la durée de vie des appels et empêche l'accès aux ressources désallouées en cas de destruction de context. En d'autres termes, si l'objet fourni comme contexte est détruit, les rappels ne seront pas exécutés. context doit pointer vers un QObject valide (et dans le cas où le rappel est une fonction membre, il doit réellement l'avoir). Comme les résultats du callback sont utilisés immédiatement, context doit résider dans le même thread que l'instance QAbstractOAuth2.
Cette fonction a été introduite dans Qt 6.9.
Voir aussi clearNetworkRequestModifier() et QNetworkRequest.
void QAbstractOAuth2::setRefreshToken(const QString &refreshToken)
Définit le nouveau jeton de rafraîchissement refreshToken à utiliser.
Un jeton de rafraîchissement personnalisé peut être utilisé pour rafraîchir le jeton d'accès via cette méthode, puis le jeton d'accès peut être rafraîchi via refreshTokens().
Remarque : fonction de définition de la propriété refreshToken.
Voir également refreshToken().
[since 6.5] void QAbstractOAuth2::setSslConfiguration(const QSslConfiguration &configuration)
Définit le site TLS configuration à utiliser lors de l'établissement d'une connexion TLS mutuelle entre le client et le serveur d'autorisation.
Cette fonction a été introduite dans Qt 6.5.
Voir aussi sslConfiguration() et sslConfigurationChanged().
[since 6.5] QSslConfiguration QAbstractOAuth2::sslConfiguration() const
Renvoie la configuration TLS à utiliser lors de l'établissement d'une connexion TLS mutuelle entre le client et le serveur d'autorisation.
Cette fonction a été introduite dans Qt 6.5.
Voir aussi setSslConfiguration() et sslConfigurationChanged().
[signal, since 6.5] void QAbstractOAuth2::sslConfigurationChanged(const QSslConfiguration &configuration)
Le signal est émis lorsque la configuration TLS a changé. Le paramètre configuration contient la nouvelle configuration TLS.
Cette fonction a été introduite dans Qt 6.5.
Voir aussi sslConfiguration() et setSslConfiguration().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.