Configuración de ThingWorx como proveedor de recursos
ThingWorx se puede configurar como proveedor de recursos para permitir solicitudes de URI de ThingWorx a través del protocolo OAuth2.
Los proveedores de servicios pueden utilizar la respuesta del proveedor de recursos para representar y mostrar datos almacenados en ThingWorx.
ThingWorx como proveedor de recursos es responsable de validar el token de acceso y los ámbitos en cada solicitud de recurso.
En las siguientes secciones se describen los pasos de configuración necesarios para activar ThingWorx como proveedor de recursos en ThingWorx. Puede que sea necesario consultar a otros administradores de productos de PTC y administradores de proveedores de identidad de la organización para configurar otras aplicaciones configuradas para esta finalidad.
Resumen del proceso
Siga este procedimiento para configurar ThingWorx como proveedor de recursos:
1. Configuración del inicio de sesión único. Este es un requisito previo para este proceso.
* 
Se recomienda encarecidamente que el canal de comunicación del proveedor de servicios al proveedor de recursos sea SSL.
Para algunas de las opciones de configuración que se utilizan en los pasos de configuración, se deberán obtener valores de la instalación de PingFederate.
Configuración del fichero resourceServerSettings.json
1. Cree el fichero resourceServerSettings.json en el mismo directorio que sso-settings.json.
A continuación, se muestra una estructura de ejemplo del fichero 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. El usuario debe asegurarse de editar el valor de cada parámetro según sus requisitos. La implementación puede variar y depende de varios factores, como las directivas de seguridad de la organización y el CAS de la federación. Utilice la información de las siguientes tablas como guía para definir los valores de los distintos parámetros.
Configuración de ResourceServerSettings.accessTokenServicesSettings
Parámetro
Descripción
Value
userAuthenticationConverterClassName
Utilidad interna.
com.ptc.eauth.identity.oauth2.rs.IntrospectionUserAuthenticationConverter
oauthTokenEndPoint
Permite especificar el extremo del token de OAuth de PingFederate (consulte la siguiente imagen).
https://<pingfed.servidor>:<pingfed.puerto>/as/token.oauth2
checkTokenEndpointUrl
Permite especificar el extremo de introspección de token de OAuth de PingFederate (consulte la siguiente imagen).
https://<pingfed.servidor>:<pingfed.puerto>/as/introspect.oauth2
clientId
Permite especificar el identificador de cliente que se debe utilizar para tokens de acceso de validación del servidor de autorización.
clientSecret
Valor del secreto de cliente.
chainedGrantType
Reservado para uso futuro.
password
Configuración de ResourceServerSettings.globalScopes
Parámetro
Descripción
Ejemplos
globalScopes
Lista de ámbitos globales separados por comas. Se incluye el conjunto mínimo de ámbitos necesarios para acceder a cualquier recurso. Si falta este parámetro o está vacío, THINGWORX se define como un ámbito global por defecto. Este parámetro no se debe dejar vacío. Si no hay ningún ámbito dedicado, defina THINGWORX como un valor.
"globalScopes": "THINGWORX"
"globalScopes": "THINGWORX_APP1,THINGWORX_APP2"
Configuración de ResourceServerSettings.uriScopes
Parámetro
Descripción
Ejemplo
uri
Patrón de URI. Permite definir el recurso o el grupo de recursos que requiere ámbitos adicionales en los ámbitos globales.
Thingworx/Things/** - control all Things
Thingworx/Things/Thing1 – control Thing1
scopes
Lista de ámbitos adicionales delimitados por comas. Solo el usuario que tiene concedidos todos los ámbitos enumerados (incluido el global) tiene permiso para obtener recursos.
method
Opcional. Permite definir el método de URI al que se aplicará el ámbito.
* 
Si no se proporciona una propiedad de método, se presupone que el ámbito dado protege el URI especificado para todos los métodos HTTP.
Los valores posibles son los métodos permitidos en el protocolo de REST, como GET o POST.
Si hay ámbitos definidos para un URI, se deben conceder los ámbitos globales además de los ámbitos de URI definidos para acceder al recurso. Si existe más de una regla de URI aplicable para el recurso solicitado, se deben conceder todos los ámbitos pertinentes para acceder al recurso. Para evitar el acceso a recursos restringidos, añada URIscope a estos puntos finales de REST con un ámbito que no exista en el servidor de autorización (por ejemplo, PingFed). Además de la protección de ámbito, ThingWorx tiene sus propios permisos basados en el usuario que también se aplicarán además de los ámbitos. Por ejemplo, en un caso en el que el usuario A solicita un recurso con los ámbitos correctos pero que no tiene permiso, la solicitud falla con un error 403.
Ejemplos
El siguiente ejemplo es un patrón pertinente de la configuración de resourceServerSettings.json:

"globalScopes": "THINGWORX",
"uriScopes": [
{
"uri": "/Thingworx/Things/**",
"scopes": "THINGWORX_THING_READ"
},
{
"uri": "/Thingworx/Things/WriteThing",
"scopes": "THINGWORX_THING_WRITE"
"method": "POST"
}
]
* 
En cada caso de uso de la siguiente tabla, si el usuario no proporciona las concesiones necesarias, ThingWorx no proporcionará el recurso.
Casos prácticos
Solicitud de URI
Concesiones obligatorias
Notas
GET /Thingworx/Mashups/Mashup1
THINGWORX
La solicitud de URI no coincide con ninguna regla uriScopes. Se aplica la regla THINGWORX globalScope.
GET /Thingworx/Things/WriteThing
THINGWORX, THINGWORX_THING_READ
Se aplica THINGWORX globalScope además de la primera regla uriScope.
POST /Thingworx/Things/WriteThing
THINGWORX, THINGWORX_THING_READ, THINGWORX_THING_WRITE
Se aplica THINGWORX globalScope además de la primera regla y la segunda regla uriScope.
Creación de conexiones PingFederate: el cliente de OAuth para ThingWorx como proveedor de recursos
El cliente de OAuth es un punto de conexión para que PingFederate proporcione tokens de acceso a ThingWorx. Los proveedores de servicios utilizan estos tokens de acceso para solicitar recursos protegidos por OAuth de ThingWorx.
1. En la página OAuth Settings de PingFederate, seleccione Clients y pulse en Create New.
2. En el campo Client ID, escriba un valor. Utilice el mismo valor que el utilizado para el parámetro ResourceServerSettings.accessTokenServicesSettings.clientId cuando se configuró el fichero resourceServerSettings.json.
3. En la sección Client Authentication, seleccione Client Secret e introduzca un valor de secreto de cliente. Utilice el mismo valor que el utilizado para el parámetro ResourceServerSettings.accessTokenServicesSettings.clientSecret cuando se configuró el ficheroresourceServerSettings.json.
4. En el campo Name, escriba un valor. Se muestra en la lista de clientes de PingFederate.
5. En el campo Description, introduzca una descripción.
6. Mantenga la sección Redirect URIS en blanco.
7. En la sección Allow Grant Types, seleccione Resource Owner Password Credentials y Access Token Validation (Client is a Resource Server).
8. En la sección Default Access Token Manager, seleccione default.
9. En la sección Persistent Grants Expiration, seleccione Grants Do Not Expire.
10. En la sección Refresh Token Rolling Policy, seleccione Roll.
11. Pulse en Save.
Gestión de ámbitos en PingFederate
1. En PingFederate, incorpore todos los ámbitos mencionados en el fichero resourceServerSettings.json a la página Scope Management de la sección OAuth Settings, incluido globalScopes. Repita los siguientes pasos para cada ámbito:
a. Añada un ámbito en el campo Scope Value.
b. Añada una descripción de ámbito en el campo Scope Description.
c. Pulse en Add.
d. Pulse en Guardar.
Cada vez que se modifica un conjunto de ámbitos en resourceServerSettings.json, se debe actualizar esta lista según corresponda. También se recomienda actualizar esta lista antes de volver a cargar resourceServerSettings.json en ThingWorx.
* 
Si no se ha definido un ámbito en el fichero resourceServerSettings.json en ResourceServerSettings.globalScopes, se debe añadir el ámbito THINGWORX aquí (en PingFederate) como THINGWORX en el ámbito global por defecto.
Actualización de ThingWorx con el fichero resourceServerSettings.json modificado
Después de actualizar el fichero resourceServerSettings.json, se debe reiniciar Tomcat.
Si solo se modifican ámbitos (secciones globalScopes y uriScopes), no es necesario reiniciar Tomcat. En su lugar, realice los siguientes pasos:
1. Inicie sesión en Composer como Administrador.
2. Vaya a Autenticadores y abra ThingworxSSOAuthenticator.
3. Abra Servicios.
4. Ejecute el servicio ReloadResourceProviderScopes.