Définition du modèle ThingWorx dans Composer > Sécurité > Authentification unique > Configuration de ThingWorx en tant que fournisseur de ressources
Configuration de ThingWorx en tant que fournisseur de ressources
Vous pouvez configurer ThingWorx en tant que fournisseur de ressources pour autoriser les requêtes d'URI ThingWorx via le protocole OAuth2.
Les fournisseurs de services peuvent utiliser la réponse du fournisseur de ressources pour rendre et afficher les données stockées dans ThingWorx.
ThingWorx en tant que fournisseur de ressources est responsable de la validation du jeton d'accès et des étendues sur chaque demande de ressources.
Les sections suivantes décrivent les étapes de configuration requises pour activer ThingWorx en tant que fournisseur de ressources dans ThingWorx. Une collaboration avec d'autres administrateurs de produits PTC et administrateurs de fournisseurs d'identités de votre organisation pourra s'avérer nécessaire pour la configuration d'autres applications requises à cette fin.
Vue d'ensemble du processus
Pour configurer ThingWorx en tant que fournisseur de ressources, suivez le processus ci-après :
1. Configurez l'authentification unique. Il s'agit là d'une condition préalable à la mise en oeuvre de ce processus.
* 
L'utilisation d'un canal de communication SSL entre le fournisseur de services et le fournisseur de ressources est fortement recommandée.
Pour certains des paramètres utilisés dans ces étapes de configuration, la fourniture de valeurs relevant de votre installation PingFederate sera nécessaire.
Configuration du fichier resourceServerSettings.json
1. Créez le fichier resourceServerSettings.json dans le même répertoire que sso-settings.json.
Voici un exemple de structure du fichier resourceServerSettings.json :
{
"ResourceServerSettings": {
"accessTokenServicesSettings": {
"userAuthenticationConverterClassName": "com.ptc.eauth.identity.oauth2.rs.IntrospectionUserAuthenticationConverter",
"oauthTokenEndPoint": "https://<pingfed.server>:9031/as/token.oauth2",
"checkTokenEndpointUrl": "https://<pingfed.server>:9031/as/introspect.oauth2",
"clientId": "See information in the table below",
"clientSecret": "See information in the table below",
"chainedGrantType": "password"
},
"globalScopes": "THINGWORX",
"uriScopes": [
{
"uri": "See information in the table below",
"scopes": "See information in the table below",
"method": "See information in the table below"
}
]
}
2. Assurez-vous de modifier la valeur de chaque paramètre par rapport à vos besoins. Votre implémentation peut varier en fonction de plusieurs facteurs, tels que les politiques de sécurité de votre organisation ou encore le serveur d'autorisation central (CAS) de votre fédération. Les tables suivantes vous aideront à définir la valeur de chaque paramètre.
Paramètres ResourceServerSettings.accessTokenServicesSettings
Paramètre
Description
Valeur
userAuthenticationConverterClassName
Utilitaire interne.
com.ptc.eauth.identity.oauth2.rs.IntrospectionUserAuthenticationConverter
oauthTokenEndPoint
Spécifie le point de terminaison du jeton OAuth de PingFederate (voir la capture d'écran ci-dessous).
https://<pingfed.server>:<pingfed.port>/as/token.oauth2
checkTokenEndpointUrl
Spécifie le point de terminaison d'introspection du jeton OAuth de PingFederate (voir la capture d'écran ci-dessous).
https://<pingfed.server>:<pingfed.port>/as/introspect.oauth2
clientId
Spécifie l'identificateur client à utiliser pour les jetons d'accès de validation du serveur Auth.
clientSecret
Valeur de la clé secrète client.
chainedGrantType
Réservé pour utilisation ultérieure.
password
Paramètres ResourceServerSettings.globalScopes
Paramètre
Description
Exemples
globalScopes
Liste des étendues globales séparées par une virgule. Définit le jeu minimal d'étendues requis pour accéder à n'importe quelle ressource. Si ce paramètre est manquant ou vide, THINGWORX est défini en tant qu'étendue globale par défaut. Veillez à renseigner la valeur de ce paramètre. En l'absence d'étendue dédiée, définissez THINGWORX comme valeur.
"globalScopes": "THINGWORX"
"globalScopes": "THINGWORX_APP1,THINGWORX_APP2"
Paramètres ResourceServerSettings.uriScopes
Paramètre
Description
Exemple
uri
Modèle d'URI. Définit la ressource ou le groupe de ressources nécessitant des étendues supplémentaires par rapport à la ou aux étendues globales.
Thingworx/Things/** - control all Things
Thingworx/Things/Thing1 – control Thing1
scopes
Liste des étendues supplémentaires séparées par une virgule. Seul un utilisateur possédant les droits requis pour toutes les étendues répertoriées (y compris globales) est autorisé à obtenir la ressource.
method
Facultatif. Définit la méthode d'URI à laquelle l'étendue sera appliquée.
* 
Si aucune propriété de méthode n'est fournie, il est supposé que l'URI spécifié est protégé par l'étendue donnée pour toutes les méthodes HTTP.
Les valeurs possibles sont toutes les méthodes autorisées dans le protocole REST, telles que GET ou POST.
Si des étendues sont définies pour un URI, alors les étendues globales ainsi que les étendues d'URI définies doivent être autorisées à accéder à la ressource. Si plus d'une règle URI est applicable à la ressource demandée, toutes les étendues appropriées doivent être autorisées à accéder à cette ressource. Pour éviter les accès à des ressources restreintes, ajoutez une URIscope à ces points de terminaison REST en spécifiant une étendue qui n'existe pas sur le serveur d'autorisation (par ex. PingFed). Outre la protection par le mécanisme des étendues, ThingWorx applique ses propres autorisations définies au niveau utilisateur au-dessus des étendues. Par exemple, si un utilisateur A demande une ressource avec les étendues correctes, mais qu'il ne dispose pas des autorisations appropriées, la requête échouera avec une erreur 403.
Exemples
Un exemple pertinent de configuration dans le fichier resourceServerSettings.json vous est donné ci-après :

"globalScopes": "THINGWORX",
"uriScopes": [
{
"uri": "/Thingworx/Things/**",
"scopes": "THINGWORX_THING_READ"
},
{
"uri": "/Thingworx/Things/WriteThing",
"scopes": "THINGWORX_THING_WRITE"
"method": "POST"
}
]
* 
Dans chaque cas d'utilisation de la table ci-dessous, si l'utilisateur ne présente pas les droits requis, ThingWorx lui refusera l'accès à la ressource.
Cas d'utilisation
Requête d'URI
Droits requis
Remarques
GET /Thingworx/Mashups/Mashup1
THINGWORX
Aucune règle uriScope ne s'applique pour la requête d'URI. La règle globalScope THINGWORX est appliquée.
GET /Thingworx/Things/WriteThing
THINGWORX, THINGWORX_THING_READ
La règle globalScope THINGWORX plus la première règle uriScope sont appliquées.
POST /Thingworx/Things/WriteThing
THINGWORX, THINGWORX_THING_READ, THINGWORX_THING_WRITE
La règle globalScope THINGWORX plus la première règle plus la deuxième règle uriScope sont appliquées.
Création des connexions PingFederate : client OAuth pour ThingWorx en tant que fournisseur de ressources
Le client OAuth constitue un point de connexion permettant à PingFederate de fournir des jetons d'accès à ThingWorx. Les fournisseurs de services utilisent ces jetons d'accès pour demander des ressources protégées par OAuth à ThingWorx.
1. Dans PingFederate, sur la page OAuth Settings, sélectionnez Clients, puis cliquez sur Create New.
2. Dans le champ Client ID, entrez une valeur. Utilisez la même valeur que celle utilisée pour le paramètre ResourceServerSettings.accessTokenServicesSettings.clientId lorsque vous avez configuré le fichier resourceServerSettings.json.
3. Dans la section Client Authentication, sélectionnez Client Secret et entrez une valeur de clé secrète client. Utilisez la même valeur que celle utilisée pour le paramètre ResourceServerSettings.accessTokenServicesSettings.clientSecret lorsque vous avez configuré le fichier resourceServerSettings.json.
4. Dans le champ Name, saisissez une valeur. Elle sera affichée dans la liste des clients de PingFederate.
5. Dans le champ Description, saisissez une description.
6. Laissez la section Redirect URIS vide.
7. Dans la section Allow Grant Types, sélectionnez Resource Owner Password Credentials et Access Token Validation (Client is a Resource Server).
8. Dans la section Default Access Token Manager, sélectionnez default.
9. Dans la section Persistent Grants Expiration, sélectionnez Grants Do Not Expire.
10. Dans la section Refresh Token Rolling Policy, sélectionnez Roll.
11. Cliquez sur Save.
Gestion des étendues dans PingFederate
1. Dans PingFederate, ajoutez toutes les étendues indiquées dans le fichier resourceServerSettings.json sur la page Scope Management de la section OAuth Settings, y compris les étendues globalScopes. Répétez les étapes suivantes pour chaque étendue :
a. Ajoutez une étendue dans le champ Scope Value.
b. Ajoutez une description de l'étendue dans le champ Scope Description.
c. Cliquez sur Ajouter.
d. Cliquez sur Enregistrer.
Chaque fois qu'un jeu d'étendues est modifié dans le fichier resourceServerSettings.json, vous devez mettre à jour cette liste en conséquence. Il est également recommandé de mettre à jour cette liste avant de recharger le fichier resourceServerSettings.json dans ThingWorx.
* 
Si aucune étendue n'a été définie dans le fichier resourceServerSettings.json sous ResourceServerSettings.globalScopes, vous devez ajouter ici (dans PingFederate) l'étendue THINGWORX en spécifiant THINGWORX comme étendue globale par défaut.
Mise à jour de ThingWorx avec le fichier resourceServerSettings.json modifié
Après avoir mis à jour le fichier resourceServerSettings.json, vous devez redémarrer Tomcat.
Si vous n'avez modifié que les étendues (la section globalScopes et la section uriScopes), vous n'avez pas besoin de redémarrer Tomcat. Effectuez en revanche les opérations suivantes :
1. Connectez-vous à Composer en tant qu'Administrateur.
2. Accédez à Authentificateurs et ouvrez ThingworxSSOAuthenticator.
3. Ouvrir Services.
4. Exécutez le service ReloadResourceProviderScopes.