# 开发者

在 URnetwork 上可以构建三类东西，对应三种不同的凭证。选对哪一类是你要做的第一个决定，而且其中的差别并非表面功夫。

| 你要构建的是 | 从这里开始 | 凭证 |
| --- | --- | --- |
| 连接到 URnetwork 的应用或设备 | [SDK](/docs/getting-started-sdk)，然后是 [SDK 导览](/docs/tour-sdk) | 一个账户 JWT，用它换取一个携带 `clientId` 的 JWT |
| 经由 Device 使用 TCP、UDP、TLS/DTLS 或 Direct Sockets 的应用客户端 | [套接字](/docs/socket) | 一台已初始化、有可用连接路径的 Device |
| 针对你自己网络的自动化 | [运营方 API](/docs/api) | 你的网络 JWT 或 `urn_` API key |
| 人们登录使用、并把它接纳进自己网络的产品 | [使用 URnetwork 登录](/docs/sign-in-with-urnetwork)（Sign in with URnetwork） | 签发给你的 OAuth `client_id` |

真正要紧的分界是**你在对谁的网络行事**。使用 SDK 和运营方 API 时，是你在对自己的网络行事，用的是你持有并掌控的凭证。使用 URnetwork 登录则是一个人把你的软件接纳进*他们的*网络 — 那份凭证你从不持有，它由他们授予，他们也可以收回。

## SDK

先看[安装](/docs/install-sdk)，然后用[示例](/docs/examples)浏览页查找十二种语言的可执行程序。每种语言都有一份安装指南，以及一个 socket 目录，里面是可运行的 HTTP 客户端集成。

Go SDK、JS/WASM SDK 和 CGo ABI 共用同一个网络引擎。桌面语言包封装 CGo 模块；Android 使用 gomobile AAR，Swift 使用 Apple XCFramework。JavaScript 同时包含 Node 和浏览器示例，都使用一台托管 Device。

[套接字](/docs/socket)讲解如何使用 Device 的用户态 TCP、UDP、TLS/DTLS 和 Direct Sockets 连接。应用无需安装系统 VPN 就能使用这些套接字。浏览器中的 DeviceRemote 使用其托管 Device 的数据包路径；它不需要一个归浏览器所有的 TUN 接口。

[选择哪个绑定](/docs/getting-started-sdk#which-binding)把各项取舍并排摆了出来。在写代码之前就做这个决定：它定下的是你的进程模型，而不只是你的语法。

## 运营方 API

URnetwork 背后的 HTTP API。它为 `connect` 协议完成引导，签发客户端用于认证的 JWT，并暴露网络赖以运转的撮合交易。每条路由和每个模式都在 [/docs/api](/docs/api)，由规范生成。

它的作用范围是**你的**网络。这个名字容易让人理解为它作用于整个网络；事实并非如此。

有一步几乎会绊倒所有人：`/auth` 路由返回的 JWT **不带** `clientId`，而 `connect` 协议要求 JWT **带有**它。用 `/network` 路由来交换。一个网络就是一个全局唯一的子网（`xyz.ur.network`）；`clientId` 是一个 16 字节的地址，等价于一个 IPv6 地址，以 UDID 形式表示。

## 使用 URnetwork 登录

让人们把你的应用或智能体接纳进他们的私有网络，使它能与他们在那里运行的其他一切协同工作。这项功能仍在开发中，尚未上线 — 目前已有哪些内容，见[该页面本身](/docs/sign-in-with-urnetwork)。

[MCP 服务器](/agents)不是第四个类别。它是一个可以凭"使用 URnetwork 登录"令牌访问的资源服务器，也是这种模式的一个实际示例。

## 令牌边界

这两套凭证体系用**互不相交的密钥集**签名。这是一道安全边界，而不是一种惯例："使用 URnetwork 登录"令牌不是平台凭证，在需要平台 JWT 的地方出示它，从构造上就注定失败。OAuth 访问令牌还绑定了受众 — 每个令牌只对恰好一个资源验证通过，在其他任何地方都会被拒绝。

只有一处获准的跨越，它是一座桥，而不是一条旁路：被接纳的应用用自己的 OAuth 令牌换取一个携带 `clientId` 的平台 JWT，其作用范围限定在它被接纳进的那个网络。这次交换是在服务器端做出的授权决定；没有任何一个令牌能在两处都验证通过。

如果你手里有两份凭证，而其中一份不起作用，原因通常就在这里。
