Skip to content

上线代理

对于上线代理,必须执行以下步骤:

  1. 开通代理服务。
  2. 获取代理的上线配置。
  3. 注册代理。

开通代理服务

为创建代理,需事先创建 asset typeasset。可以将 asset type 与 asset 的关系视为类似于类和对象之间的关系。对象是类的实例,类是对象的蓝图。这也同样适用于 asset type 和 asset。

创建新实体后,我们可以使用 Agent Management Serviceagents 端点创建将绑定到此实体的代理:

POST /api/agentmanagement/v3/agents HTTP1/1
Content-Type:application/json
...
{
 "entityId":"3b27818ea09a46b48c7eb3fbd878349f",
 "name":"Nanobox Agent",
 "securityProfile":"SHARED_SECRET"
}
参数 描述 备注
entityId 事先为代理创建的实体 ID。 每个代理均需要一个实体。
name 代理名称 与 Id 不同。要求每个租户的代理名称必须唯一。
securityProfile 定义代理将向 MindSphere 提供其凭证的方法:

共享密钥
对称加密(代理和 MindSphere 均知道的密码)

RSA
非对称加密(公钥私钥对,其中 MindSphere 仅知道公钥,代理持有私钥)
SHARED_SECRET 或 RSA_3072

Agent Management Service 在创建代理时运行以下逻辑:

Agent Management:创建代理检查和工作流程

如果所有检查均通过,则 Agent Management 将创建代理。最初,新创建代理的上线状态是 NOT_ONBOARDED。Agent Management 为相关代理创建上线配置,并将上线状态设置为 ONBOARDING。这是一个自动过程,无需用户参与。

创建成功后,MindSphere 将返回带有 JSON 文本的 HTTP 响应 201 Created,其中包含有关新配置代理的其它数据:

HTTP/1.1 201 Created
Content-Type:Application/Json
...
{
 "id":"3b27818ea09a46b48c7eb3fbd878349f",
 "eTag":"2",
 "entityId":"3b27818ea09a46b48c7eb3fbd878349f",
 "name":"Nanobox Agent",
 "securityProfile":"SHARED_SECRET"
}
参数 描述 备注
id 已创建的代理 Id 代理 Id 与实体 Id 相同。二者为一一对应关系。
eTag eTag 版本 用于代理创建期间保持同步,无实际意义。
entityId 创建此代理的实体的 Id。
name 代理名称
securityProfile 代理的安全配置文件 SHARED_SECRET 或 RSA_3072

获取代理的上线配置

创建代理后,代理需要获取上线配置以便上线 MindSphere。如果代理未上线,则无法使用提供的任何服务。

上线功能由 Agent Management Serviceboarding 端点提供。使用代理 Id 作为路径参数发送GET /api/agentmanagement/v3/agents//boarding/configuration HTTP 请求将返回以下上线响应文本示例:

{
 "content": {
 "baseUrl": "https://southgate.eu1.mindsphere.io",
 "iat": "yJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJTQ0kiLCJzdWIiOiJ0ZXN0LWFnZW50IiwiYXVkIjpbIkFJQU0iXSwiaWF0IjoxNTEzNjA3NjQ3LCJuYmYiOjE1MTM2MDc2NDcsImV4cCI6MTUxNDIxMjQ0NywianRpIjoiODBkNGViYTAtZTQwMC0xMWU3LTlmMDYtM2QzOTg3NTQ1MjNjIiwic2NvcGUiOlsiSUFUIl0sInRlbmFudCI6InRlc3QtdGVuYW50IiwiY2xpZW50X2NyZWRlbnRpYWxzX3Byb2ZpbGUiOlsiUlNBXzMwNzIiXSwic2NoZW1hcyI6WyJ1cm46c2llbWVuczptaW5kc3BoZXJlOnYxIl19.F/C44dH0orAVrKXDxcdGTgDFGsYzxOLR84j49S1qQMcX4GKq0HGfN7mm9N2tAUo8+z9ISRIW+D/n81uioF4ro+cyjGFbstatsRVH8hFFbZe4WcSChBHpwmA9IBOL0iFo/8C/7FppjhmHnlJNTQrfdkPJbtgQljtlY46BqW2pKp3wPUPJb21nLhVwMv1AiAbISg17FazhzuV7n12pJxdtpEB+mYZZe16P9amW217iyaDyRZ0+UhldHyKYwX0in5SpvJ1gzFlhMNwYWhG8zk6EJ8OYY49OhTYLHtvoEm8IIxarPWWmMztwrEXvNvQi6svZ1NCcgbkuSTwdEyJDzPqmbw==",
 "clientCredentialProfile": [
 "SHARED_SECRET"
 ],
 "clientId":"5fa51b64-dce2-11e7-9296-cec278b6b50a",
 "tenant":"6e70640a-dce2-11e7-9296-cec278b6b50a"
 },
 "expiration":"2017-12-18T14:04:01.076Z"
}
参数 描述 备注
baseUrl Southgate URL
iat 初始访问令牌 (IAT)
Agent Management 签名的 JSON Web 令牌,需要进行初始注册。
IAT 可能会到期,默认有效期为 7 天。如果 IAT 到期,则代理需要调用此端点以获取新配置。
clientCredentialProfile 配置期间设置的代理的安全配置文件。 SHARED_SECRET 或 RSA_3072
clientId 代理 Id
tenant 代理租户
expiration 保持 IAT 的到期时间 默认值为 7 天。

注册代理

获取初始访问令牌 (IAT) 后,代理需要向 MindSphere 注册。注册过程根据 OAuth 2.0 授权协议进行。因此,代理将向 MindSphere 发送 HTTP POST 请求。构建此请求的方式略有不同,具体取决于代理的安全配置文件。

具有共享密钥安全配置文件的代理

注册代理由 Agent Management Serviceregister 端点提供。代理将发送带有空白文本的 HTTP POST 请求。

POST /api/agentmanagement/v3/register HTTP/1.1
Content-Type:application/json
Accept:application/json
Authorization:Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJTQ0kiLCJzdWIiOiJ0ZXN0LWFnZW50IiwiYXVkIjpbIkFJQU0iXSwiaWF0IjoxNTEzNjA3NzI1LCJuYmYiOjE1MTM2MDc3MjUsImV4cCI6MTUxNDIxMjUyNSwianRpIjoiYWY2YzkwMzAtZTQwMC0xMWU3LTk4MjQtMTEwNzBjODYyZmRiIiwic2NvcGUiOlsiSUFUIl0sInRlbmFudCI6InRlc3QtdGVuYW50IiwiY2xpZW50X2NyZWRlbnRpYWxzX3Byb2ZpbGUiOlsiU0hBUkVEX1NFQ1JFVCJdLCJzY2hlbWFzIjpbInVybjpzaWVtZW5zOm1pbmRzcGhlcmU6djEiXX0=.Re1be4kiDfIs+tqZ+CEZ1/3UoBrHZ4azy3Lesse8bK6LvFtUIU626+g4JDjRdJV9gCstqfYsj15cPC+PJLOfxZFBMnoBY451RLDVJOJOtAncLPdvnPHXvvTu3VbU5Qpx0SCLY/VoDRva1a1/vMy/6S2lpOJ4dYcOMq1madzyf4iXGwmTMiKmfZEHAJuxmFRNosaEo+SkIm//OQ2SCGlWvAr1iM9QHIo8kpjYukOSt+5ubpXqlmeX7Gu5ouVABaC3T03uTzK620wNDTxhbPpNjG1RMzkUHfNcQJT0K5UuSJaMjSc1tolETAlzCz4fFevzS8UcfcUVR1Wre8qilt3khg==
Host: southgate.{region}-{env}.{mindsphere-domain}
{} //empty JSON Object

信息

{region}{env}{mindsphere-domain} 是区域、环境和域的占位符。eu1 中 RC 环境的有效 URL 是 southgate.eu1-rc.mindsphere.io

MindSphere 收到请求并进行验证(IAT 验证、强制性消息头验证等)。如果验证成功,MindSphere 将创建一个共享密钥(密码),并以预定义的共享密钥到期时间(默认为 7 天)将其存储在其数据库中。

同时,MindSphere 为客户端创建另一个名为注册访问令牌 (RAT) 的令牌。当共享密钥到期时,预计客户端将使用创建的 RAT 而不是 IAT 发送注册更新请求,以便可以更新注册和密码。

这是共享密钥安全配置文件的成功注册 HTTP 响应:

HTTP/1.1 201 Created
Content-Type:application/json
Cache-Control:no-store
Pragma:no-cache
{
 "client_id":"008ceaf9dff443ee94205f903aa545c4",
 "token_endpoint_auth_method": "client_secret_jwt",
 "grant_types": [
 "client_credentials"
 ],
 "client_secret": "ly7zmXbz0Izla6B82xlAYRVBcKDcCFatwmnHQmR8Ycw",
 "client_secret_expires_at":1514206768,
 "registration_access_token": "eyJraWQiOiJrZXktaWQtMSIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJTQ0kiLCJzdWIiOiIwMDhjZWFmOWRmZjQ0M2VlOTQyMDVmOTAzYWE1NDVjNCIsImF1ZCI6IkFJQU0iLCJpYXQiOjE1MTM2MDE5NjgsIm5iZiI6MTUxMzYwMTk2OCwiZXhwIjoxNTE0MjA2NzY4LCJqdGkiOiIwMTNiNzU2Zi02YWZhLTRiZjYtYjY2Yi1jZTU3NWUwYmIyNzMiLCJzY29wZSI6IlJBVCIsInRlbiI6ImNvbm50ZW5hbnRvbmVxYSIsImNsaWVudF9jcmVkZW50aWFsc19wcm9maWxlIjpbIlNIQVJFRF9TRUNSRVQiXSwic2NoZW1hcyI6WyJ1cm46c2llbWVuczptaW5kc3BoZXJlOnYxIl19.KFERGKzl5YKhEnNptKYHvZWngAs07iZLR_F2DoPAuAW_rowGk3ykooztfHJoEtWvi1HlWAbtn5MX7QOE0EYyNJN-4K3PEStKLeRc6Ony9vAIzdAUhn-aP5c0fKvKeSRNpd8pxXPtMbEOIwKWUa9XmpbOwem6qkD3bvnGzqnHMiYN4dXluNNBM1uhK8rCKafW3QwOKZVYkfJgyyvAlnr978hbEHzK28g5mBZWOjx7inDmAdiD0woI39S4NoeU031bYQ8N7gnDBrqo8ZE5C_VtigRmWCFbnz_6-Qna8akW_MkhobEjmF7v74E3orb2Dfj-FosxkX0J4VhJEgD3hAwPOQ",
 "registration_client_uri": "https://southgate.eu1-rc.mindsphere.io/api/agentmanagement/v3/register/008ceaf9dff443ee94205f903aa545c4"
}
参数 描述 备注
client_id 代理 Id
token_endpoint_auth_method 请求的令牌端点身份验证方法的 String 指示符 RFC 7591 中定义
grant_types 请求访问令牌时使用的 OAuth 2.0 访问令牌流类型。
client_secret 生成的客户端密钥,客户端将在请求访问令牌时使用。
client_secret_expires_at 生成的客户端密钥到期的时间。 如果到期,客户需要重新注册 RAT。
registration_access_token 注册访问令牌 (RAT)。 客户需要 RAT 更新其注册。
registration_client_uri 客户端更新其注册时使用的 URI。

具有 RSA 3072 安全配置文件的代理

注册代理由 Agent Management Serviceregister 端点提供。代理将发送请求文本中带有其公钥的 HTTP POST 请求。

POST /api/agentmanagement/v3/register HTTP/1.1
Content-Type:application/json
Accept:application/json
Authorization:Bearer ey...{yourIAT}
Host:authorizationserver.mindsphere.com
{
 "jwks": {"keys": [
 { // RSA key created by client
 "e":"AQAB",
 "n": "nj3YJwsLUFl9BmpAbkOswCNVx17Eh9wMO-_AReZwBqfaWFcfG
 HrZXsIV2VMCNVNU8Tpb4obUaSXcRcQ-VMsfQPJm9IzgtRdAY8NN8Xb7PEcYyk
 lBjvTtuPbpzIaqyiUepzUXNDFuAOOkrIol3WmflPUUgMKULBN0EUd1fpOD70p
 RM0rlp_gg_WNUKoW1V-3keYUJoXH9NztEDm_D2MQXj9eGOJJ8yPgGL8PAZMLe
 2R7jb9TxOCPDED7tY_TU4nFPlxptw59A42mldEmViXsKQt60s1SLboazxFKve
 qXC_jpLUt22OC6GUG63p-REw-ZOr3r845z50wMuzifQrMI9bQ",
 "kty":"RSA",
 "kid": "key-1"
 }
 ]}
}
参数 描述 备注
jwks 客户端的 JSON Web 密钥集,文档值 RFC 7517 中定义
e 公钥指数 e 有关详细信息,请参见 RSA 算法。
n 模数 n 有关详细信息,请参见 RSA 算法。
kty 密钥类型 确定密钥使用的加密算法系列。
kid 用于匹配特定密钥的密钥 ID。 例如,用于在密钥滚动过程中从 JWK 集内的一组密钥中进行选择。

MindSphere 收到请求并进行验证(IAT 验证、强制性消息头验证等)。如果验证成功,MindSphere 会将代理公钥存储在其数据库中。

同时,MindSphere 为客户端创建另一个名为注册访问令牌 (RAT) 的令牌。当客户端密钥到期时,预计客户端将使用创建的 RAT 而不是 IAT 发送注册更新请求,以便可以更新注册。

这是 RSA 3072 安全配置文件的成功注册 HTTP 响应:

HTTP/1.1 201 Created
Content-Type:application/json
Cache-Control:no-store
Pragma:no-cache
{
 "client_id": "s6BhdRkqt3", //Client ID - equals value of "sub" claim in IAT
 "token_endpoint_auth_method": "private_key_jwt",
 "grant_types": ["client_credentials"],
 "client_secret_expires_at":1234545 // 7 days after created.
 "registration_access_token": "ey..."
 "registration_client_uri": "https://authorizationserver.mindsphere.com/register/s6BhdRkqt3"
}
参数 描述 备注
client_id 代理 Id
token_endpoint_auth_method 请求的令牌端点身份验证方法的 String 指示符。MindSphere 使用两种类型的 JWT 身份验证,具体取决于用于保护断言的密钥:

client_secret_jwt
使用基于哈希的消息认证码 (HMAC) 对 JWT 进行保护,该认证码使用客户端密钥进行计算。

private_key_jwt
使用属于客户端的非对称密钥(RSA 或 EC)对 JWT 进行签名。
有关详细信息,请参见 RFC 7591,第 2 节“客户端元数据”
grant_types 请求访问令牌时使用的 OAuth 2.0 访问令牌流类型。
client_secret 生成的客户端密钥,客户端将在请求访问令牌时使用。
client_secret_expires_at 生成的客户端密钥到期的时间。 如果到期,客户需要重新注册 RAT。
registration_access_token 注册访问令牌 (RAT) 客户需要 RAT 更新其注册。
registration_client_uri 客户端更新其注册时使用的 URI。

刷新注册

默认情况下,每个已注册代理(RSA 3072 或共享密钥安全配置文件)的凭证有效期为 7 天。在此期限之后,MindSphere 将不会向代理授予访问权限,并会使代理凭证无效。代理需要向 MindSphere 重新注册,并提供其注册访问令牌 (RAT)。代理需要对 registration_client_uri 的 URL 值执行此请求。此 URL 在成功注册的 HTTP 响应 201 Created 的 JSON 文本中提供(请参见 注册代理。 部分)。

注册访问令牌没有实际的到期时间(有效期至 1000000000-12-31T23:59:59.999999999Z),但每次客户端刷新其注册时,MindSphere 都会生成一个新的 RAT。代理应在其凭证到期之前刷新其注册。

刷新代理注册由 Agent Management Serviceregister 端点提供。以下是具有共享密钥安全配置文件的代理的刷新请求示例:

PUT /api/agentmanagement/v3/register/{agent-id} HTTP/1.1
Content-Type:application/json
Accept:application/json
Authorization:Bearer ey...{yourRAT}
Host:authorizationserver.mindsphere.com
{
 client_id:agentid
}

如果 RAT 正确且提供的客户端 Id 匹配,则会向客户端返回新的注册访问令牌。旧的注册访问令牌 **必须**由客户端丢弃,MindSphere 会自动丢弃旧的 RAT。

MindSphere 将返回 HTTP 响应 200 OK。JSON 文本的结构与代理的初始注册相同:

HTTP/1.1 200 OK
Content-Type:application/json
Cache-Control:no-store
Pragma:no-cache
{
 client_id: 'f1e45f31-0014-4e54-b58b-2065f965f7db',
 token_endpoint_auth_method: 'client_secret_jwt',
 grant_types: [ 'client_credentials' ],
 client_secret: 'usiRBejgh6XhOEYXpedDJZzhA4TTOw_nFmsKuyTl0NQ',
 client_secret_expires_at:1516898093,
 registration_access_token: 'eyJraWQiOiJqd3QiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJTQ0kiLCJzdWIiOiJmMWU0NWYzMS0wMDE0LTRlNTQtYjU4Yi0yMDY1Zjk2NWY3ZGIiLCJhdWQiOiJBSUFNIiwiaWF0IjoxNTE2MjkzMjkzLCJuYmYiOjE1MTYyOTMyOTMsImV4cCI6MzE1NTY4ODk4NjQ0MDMxOTksImp0aSI6IjY0YmQxNTcyLTEyNmItNDI0My1hNWJmLWVjMzAxNTNmYTNmNCIsInNjb3BlIjoiUkFUIiwidGVuIjoibXlUZW5hbnRJZCIsImNsaWVudF9jcmVkZW50aWFsc19wcm9maWxlIjpbIlNIQVJFRF9TRUNSRVQiXSwic2NoZW1hcyI6WyJ1cm46c2llbWVuczptaW5kc3BoZXJlOnYxIl19.LOnsuClqKFMMf_5aE-y0al2cPIgrX8S92GBw_owVHPEfvPzVW_6ISffDy_Oa944dqHT0tmXg8VwR7PhnP0PQK4rQkFsuLOI_lf84xevVnmjbVov5Lqg4WTP9hxxIe9PFzQ8DdpTx4KSwEvUEftqv694sK4lY2EKAyuAQWfjPMifhUwpyCt9dQkcpHf87YygDThrj9AoBmC--LUnvYZzMGpS9IvnAZaq22AKuzv-B-j31L5vCO_J6GrqN7zS6goYewinFuKeS14rDCGE-bgdwyZMpkv4BdyUmnQgQIxlIrsWJH1X3j9ZIQKlFpN8F0eY1TlfpIJ4rqkqwnRbL_WsLUQ',
 registration_client_uri: 'https://southgate.eu1.mindsphere.io/api/agentmanagement/v3/register/f1e45f31-0014-4e54-b58b-2065f965f7db'
}
参数 描述 备注
client_id 代理 Id
token_endpoint_auth_method 请求的令牌端点身份验证方法的 String 指示符 RFC 7591 中定义
grant_types 请求访问令牌时使用的 OAuth 2.0 访问令牌流类型。
client_secret 生成的客户端密钥,客户端将在请求访问令牌时使用。
client_secret_expires_at 生成的客户端密钥到期的时间。 如果到期,客户需要重新注册 RAT。
registration_access_token 注册访问令牌 (RAT)。 客户需要 RAT 更新其注册。
registration_client_uri 客户端更新其注册时使用的 URI。

对于具有 RSA 3072 安全配置文件的代理,注册刷新过程相同。只有注册刷新请求 HTTP 主体略有变化:

PUT /api/agentmanagement/v3/register/{agent-id} HTTP/1.1
Content-Type:application/json
Accept:application/json
Authorization:Bearer ey...{yourRAT}
Host:authorizationserver.mindsphere.com
{
 "jwks": {"keys": [
 { // RSA key created by client
 "e":"AQAB",
 "n": "nj3YJwsLUFl9BmpAbkOswCNVx17Eh9wMO-_AReZwBqfaWFcfG
 HrZXsIV2VMCNVNU8Tpb4obUaSXcRcQ-VMsfQPJm9IzgtRdAY8NN8Xb7PEcYyk
 lBjvTtuPbpzIaqyiUepzUXNDFuAOOkrIol3WmflPUUgMKULBN0EUd1fpOD70p
 RM0rlp_gg_WNUKoW1V-3keYUJoXH9NztEDm_D2MQXj9eGOJJ8yPgGL8PAZMLe
 2R7jb9TxOCPDED7tY_TU4nFPlxptw59A42mldEmViXsKQt60s1SLboazxFKve
 qXC_jpLUt22OC6GUG63p-REw-ZOr3r845z50wMuzifQrMI9bQ",
 "kty":"RSA",
 "kid": "key-1"
 }
 ]}
}

代理状态和令牌处理

以下图表阐述了可用的代理状态和相关的令牌处理:

代理状态图表

相关链接

还有问题?

向社区提问


除非另行声明,该网站内容遵循MindSphere开发许可协议.


Last update: June 26, 2019