# Desarrolladores

Tres cosas que construir sobre URnetwork, y tres credenciales distintas.
Elegir la correcta es la primera decisión, y la diferencia no es cosmética.

| Estás construyendo | Empieza por | Credencial |
| --- | --- | --- |
| Una app o un dispositivo que se conecta a URnetwork | [SDK](/docs/getting-started-sdk), y después el [recorrido del SDK](/docs/tour-sdk) | Un JWT de cuenta, intercambiado por uno que lleva un `clientId` |
| Un cliente de aplicación que usa TCP, UDP, TLS/DTLS o Direct Sockets a través de un Device | [Sockets del SDK](/docs/socket) | Un Device inicializado con una ruta de conexión disponible |
| Automatización sobre tu propia red | [API del operador](/docs/api) | Tu JWT de red o tu clave de API `urn_` |
| Un producto en el que la gente inicia sesión y que admite en su red | [Iniciar sesión con URnetwork](/docs/sign-in-with-urnetwork) (Sign in with URnetwork) | Un `client_id` de OAuth emitido a tu nombre |

La línea divisoria que importa es **sobre la red de quién actúas**. Con el SDK
y la API del operador actúas sobre la tuya, con una credencial que tienes y
controlas.
Iniciar sesión con URnetwork es una persona que admite tu software en la *suya*:
esa credencial nunca la tienes tú; te la concede esa persona, y puede
retirarla.

## El SDK

Empieza por [Instalar el SDK](/docs/install-sdk) y usa después el explorador
de [ejemplos](/docs/examples) para ver programas ejecutables en doce lenguajes.
Cada lenguaje tiene una guía de instalación y un directorio socket con
integraciones ejecutables de clientes HTTP.

El SDK de Go, el SDK de JS/WASM y la ABI de CGo comparten un mismo motor de
red. Los paquetes de lenguaje de escritorio envuelven el módulo CGo; Android
usa el AAR de gomobile y Swift usa el XCFramework de Apple. JavaScript incluye
ejemplos tanto para Node como para el navegador, que usan un Device alojado.

[Sockets del SDK](/docs/socket) explica cómo usar las conexiones TCP, UDP,
TLS/DTLS y Direct Sockets de un Device, en espacio de usuario. Las
aplicaciones pueden usar estos sockets sin instalar una VPN del sistema. El
DeviceRemote de un navegador usa la ruta de paquetes de su Device alojado; no
requiere una interfaz TUN propiedad del navegador.

[Qué binding elegir](/docs/getting-started-sdk#which-binding) expone los
compromisos uno junto a otro. Toma esa decisión antes de escribir código: fija
tu modelo de procesos, no solo tu sintaxis.

## API del operador

La API HTTP que hay detrás de URnetwork. Arranca el protocolo `connect`, emite
los JWT con los que se autentican los clientes y expone las transacciones de
emparejamiento sobre las que funciona la red. Todas las rutas y esquemas están
en [/docs/api](/docs/api), generados a partir de la especificación.

Su alcance es **tu** red. El nombre invita a pensar que opera sobre la red en
general; no es así.

Hay un paso en el que tropieza casi todo el mundo: las rutas `/auth` devuelven
un JWT **sin** `clientId`, y el protocolo `connect` exige uno **con** él. Usa
las rutas `/network` para intercambiarlo. Una red es una subred única a nivel
global (`xyz.ur.network`); un `clientId` es una dirección de 16 bytes,
equivalente a una dirección IPv6 y expresada como un UDID.

## Iniciar sesión con URnetwork

Permite que la gente admita tu app o tu agente en su red privada, para que
pueda coordinarse con todo lo demás que tiene funcionando allí. Está en
desarrollo y aún no está en producción: consulta la
[propia página](/docs/sign-in-with-urnetwork) para ver lo que existe hoy.

El [servidor MCP](/agents) no es una cuarta categoría. Es un servidor de
recursos al que se llega con un token de Iniciar sesión con URnetwork, y un
ejemplo práctico del patrón.

## Fronteras entre tokens

Los dos sistemas de credenciales se firman con
**conjuntos de claves disjuntos**. Es una frontera de seguridad, no una
convención: un token de
Iniciar sesión con URnetwork no es una credencial de plataforma, y presentarlo
donde se espera un JWT de plataforma falla por construcción. Los tokens de
acceso de OAuth están además ligados a una audiencia: cada uno se verifica
para exactamente un recurso y se rechaza en cualquier otro sitio.

Hay un único cruce autorizado, y es un puente, no un atajo: una app admitida
intercambia su token de OAuth por un JWT de plataforma que lleva un
`clientId`, limitado a la red en la que fue admitida. El intercambio es una
decisión de autorización que se toma en el servidor; ningún token se verifica
en dos sitios.

Si tienes dos credenciales y una de ellas no funciona, este suele ser el
motivo.
