一日一点RakNet(54)--TwoWayAuthentication插件
2012-05-16 20:05
288 查看
TwoWayAuthentication插件概览
由一对系统安全地验证已知的密码
通常使用RakNet你可以使用Secure connections安全传输数据。然而,有时一对系统或许没有活动的安全连接。例如,在移动电话上,安全代码需要使用太多内存,变得很慢,或者不能编译。在这种情况下,你依然可以提前向两个系统使用密码验证一个远端系统。RakNet使用Two
Way authentication实现了这个功能。并不是它自己发送密码,而是发送密码的one way hash。这个hash被验证是正确的,还是错误的,验证结果返回给用户。
使用:
//
将插件附加到RakPeerInterface实例上
rakPeer->AttachPlugin(&twoWayAuthenticationPlugin);
// 增加一个密码,真正的密码(Password0)与快速hash查询的标识(PWD0)相关
twoWayAuthenticationPlugin.AddPassword("PWD0", "Password0");
// Challenge我们连接的另外的一个系统
twoWayAuthenticationPlugin.Challenge("PWD0", remoteSystemAddressOrGuid);
如果另外一个系统也运行了two way Authentication插件,并且设置了相同的密码,你会得到ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_SUCCESS消息,另外一个系统会得到ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_SUCCESS消息。如果远端系统运行了这个插件,但是有不同的密码,他们会得到ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_FAILURE消息,你会得到ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_FAILURE消息。如果另外一个系统没有运行这个插件你会得到ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT消息。
在这些情况下:
ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_SUCCESS
ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_SUCCESS
ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT
ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_FAILURE
你可以读取消息所相关的那个challenge密码,使用如下的代码:
RakNet::BitStream bs(packet->data, packet->length, false);
bs.IgnoreBytes(sizeof(RakNet::MessageID));
RakNet::RakString password;
bs.Read(password);
系统所做的一切工作是在两个系统之间验证密码。它不能够开启或关闭任何的RakNet功能,或阻止在challenge期间发送其他的消息。然而,你可以将这个插件和MessageFilter插件配对使用,这样一个新的连接在验证之前无法发送任何消息。要实现这个功能,在附加本插件之前,将MessageFilter插件附加到RakPeerInterface实例上(事实上应该MessageFilter先加入)。调用MessageFilter::SetAutoAddNewConnectionsToFilter()这样可以过滤新的连接。通过调用MessageFilter::SetAllowMessageID()方法来保证two
way authentication消息在相同过滤器的同一个channel被允许。当已经验证了一个连接,使用MessageFilter::SetSystemFilterSet()修改系统的channel。
参考Samples/TwoWayAuthentication中的完整例子。参考TwoWayAuthentication.h头文件查看函数的完整文档和参数说明。
By
北洋小郭
转载请注明出处,请勿用于商业用途,谢谢!
注:
C# and SWIG一节由于是可选的一节,不是RakNet的主要内容,没有进行翻译。
由一对系统安全地验证已知的密码
通常使用RakNet你可以使用Secure connections安全传输数据。然而,有时一对系统或许没有活动的安全连接。例如,在移动电话上,安全代码需要使用太多内存,变得很慢,或者不能编译。在这种情况下,你依然可以提前向两个系统使用密码验证一个远端系统。RakNet使用Two
Way authentication实现了这个功能。并不是它自己发送密码,而是发送密码的one way hash。这个hash被验证是正确的,还是错误的,验证结果返回给用户。
使用:
//
将插件附加到RakPeerInterface实例上
rakPeer->AttachPlugin(&twoWayAuthenticationPlugin);
// 增加一个密码,真正的密码(Password0)与快速hash查询的标识(PWD0)相关
twoWayAuthenticationPlugin.AddPassword("PWD0", "Password0");
// Challenge我们连接的另外的一个系统
twoWayAuthenticationPlugin.Challenge("PWD0", remoteSystemAddressOrGuid);
如果另外一个系统也运行了two way Authentication插件,并且设置了相同的密码,你会得到ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_SUCCESS消息,另外一个系统会得到ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_SUCCESS消息。如果远端系统运行了这个插件,但是有不同的密码,他们会得到ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_FAILURE消息,你会得到ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_FAILURE消息。如果另外一个系统没有运行这个插件你会得到ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT消息。
在这些情况下:
ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_SUCCESS
ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_SUCCESS
ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT
ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_FAILURE
你可以读取消息所相关的那个challenge密码,使用如下的代码:
RakNet::BitStream bs(packet->data, packet->length, false);
bs.IgnoreBytes(sizeof(RakNet::MessageID));
RakNet::RakString password;
bs.Read(password);
系统所做的一切工作是在两个系统之间验证密码。它不能够开启或关闭任何的RakNet功能,或阻止在challenge期间发送其他的消息。然而,你可以将这个插件和MessageFilter插件配对使用,这样一个新的连接在验证之前无法发送任何消息。要实现这个功能,在附加本插件之前,将MessageFilter插件附加到RakPeerInterface实例上(事实上应该MessageFilter先加入)。调用MessageFilter::SetAutoAddNewConnectionsToFilter()这样可以过滤新的连接。通过调用MessageFilter::SetAllowMessageID()方法来保证two
way authentication消息在相同过滤器的同一个channel被允许。当已经验证了一个连接,使用MessageFilter::SetSystemFilterSet()修改系统的channel。
参考Samples/TwoWayAuthentication中的完整例子。参考TwoWayAuthentication.h头文件查看函数的完整文档和参数说明。
By
北洋小郭
转载请注明出处,请勿用于商业用途,谢谢!
注:
C# and SWIG一节由于是可选的一节,不是RakNet的主要内容,没有进行翻译。
相关文章推荐
- GCDAsyncSocket two way authentication SSL 双向认证
- 一日一点RakNet(30)--Interface 2插件
- jQuery two way bindings(双向数据绑定插件)
- 一日一点RakNet(32)--RPC4插件
- 一日一点RakNet(1)--RakNet
- Jenkins Plugins - A better way to install Plugins 插件安装
- Using Spring 4 WebSocket, sockJS and Stomp support to implement two way server client communication
- 一日一点RakNet(2)--多人游戏组件
- 一日一点RakNet之第六篇代码说明(帮助手册)
- QuickSort two way, three way partition and many other implementations
- 一日一点RakNet(55)--Crash Reporter(崩溃报告器)
- Internal Sorting: Straight Two-way Merge Sort: Sorting by Merging
- 自定义ListView盘点-TwoWayView(20)
- RakNet学习(31) -- RPC4插件
- 一日一点RakNet(34)--Connection Graph
- 两行gridview two-way-gridview
- part 5 Two way databinding in AngularJS
- vue双向过滤器two-way
- 一日一点RakNet(24)--Rackspace Interface
- 一日一点RakNet(42)--Lobby2Client-Games for Windows Live