在本部分,您将学习如何创建和使用强名称程序集,连同 Javascript 一起,与自定义的后端进行交互。
信任链 (Chain of Trust) 系统允许外部互联网应用程序信任源于 Unity 网络播放器 (Web Player) 的请求。如果希望为 Unity 开发人员在 Unity 网络播放器 (Web Player) 中创建游戏提供 全功能 API,这点会比较有用。如需使用信任链 (Chain of Trust) 系统,必须拥有某种接受请求的互联网应用程序后端,最常见的是带 REST API 的网络应用程序。还要有一个托管 C# (Managed C#) 程序集,包含调用互联网应用程序的代码。
建立信任链的第一步是创建程序集签名所需的加密密匙对。在 Windows、OS X 或 Linux 系统上使用 SN 工具进行。
sn -k myNewKey.snk
myNewKey.snk
替换为想要的密匙对文件名。从信任链 (Chain of Trust) 系统的角度来说,文件名无关紧要。
接着针对托管 C# (Managed C#) 程序集(将用于调用后端),使用生成的密匙对进行签署。需要用到 Windows、OS X 和 Linux 系统中随附的 al
工具。
程序集签名的过程非常简单。
al /out:mySignedAssembly.dll myUnsignedAssembly.dll /keyfile:myNewSky.snk
mySignedAssembly.dll
是程序集的最终所需名称。
myUnsignedAssembly.dll
是一般未签名的托管 C# (Managed C#) 程序集的名称。
myNewKey.snk
是加密密匙对文件的名称。
al
结束运行,签署的程序集将准备就绪。将其放到 Unity 工程中,与信任链 (Chain of Trust) 系统一起使用。
可在 Unity 游戏加载完成后随时在 Unity 网络播放器 (Web Player) 中放入机密。该步骤通过暴露于 UnityObject2
Javascript 对象中的 Javascript SendMessage 函数完成。
向某游戏对象传递一条特殊格式的消息时,信任链 (Chain of Trust) 系统检测到您想注入的机密并拦截消息。无需创建或重命名任何游戏对象就可以使用该系统。有了一个名为 u
的 UnityObject2
实例,Javascript 调用即为:
u.GetUnity().SendMessage("ChainOfTrust_SetValueASDF", ".", "name=mySecretDataName;value=mySecretValue;publickey=publicKeyTokenOfMyAssembly");
ChainOfTrust_SetValue
开头,但是附加在 ChainOfTrust_SetValue
后的任何字符会被安全忽略。
名称 (name)
,
值 (value)
以及
公匙 (publickey)
。
=
)。
名称 (name)
。替换上例中的 mySecretDataName
即可。
值 (value)
是共享密匙,或希望保存在信任链 (Chain of Trust) 系统中的其他机密资料。准确的说,该值所含内容具体针对特定应用程序。替换上例中的 mySecretDataValue
即可。
公匙 (publickey)
是用来签署托管 C# (Managed C#) 程序集的公匙标记。利用 sn
工具可以在签署的程序集中找到:
sn -T mySignedAssembly.dll
复制整个公匙标记,前后不带空格,并替换上例中的 myPublicKeyToken
。
一旦机密注入到 Unity 网络播放器 (Web Player) 中,就只能通过用匹配的公匙标记加密签署的(“强命名”)托管 C# (Managed C#) 程序集来取回。
name=
子句中指定的那样。
name=mySecret;value=superSecretData;publickey=A92181sn828O
,取回托管 C# (Managed C#) 程序集中机密的代码为:
string myValue = Security.GetChainOfTrustValue("mySecret");
Page last updated: 2013-07-01