Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Android JSON安全_C#_Android_Json_Security_Ssl - Fatal编程技术网

C# Android JSON安全

C# Android JSON安全,c#,android,json,security,ssl,C#,Android,Json,Security,Ssl,我正在开发一个Android项目,需要连接到后端C#服务以获取数据。 我正在考虑使用JSON来避免SOAP消息开销。实现JSON请求安全性的最佳方法是什么,以使其不可供公众访问,而只能由专用用户访问 我考虑在使用SSL登录后从服务器获取一个令牌(或SessionID),登录后的所有服务调用都将使用该令牌进行身份验证 但是登录后我应该如何使用令牌- 1) .通过HTTP(是否可以轻松拦截?) 2) .通过HTTPs(如果每次通话都通过HTTPs进行,是否会出现性能问题?) 您能否就如何在不影响性能

我正在开发一个Android项目,需要连接到后端C#服务以获取数据。 我正在考虑使用JSON来避免SOAP消息开销。实现JSON请求安全性的最佳方法是什么,以使其不可供公众访问,而只能由专用用户访问

我考虑在使用SSL登录后从服务器获取一个令牌(或SessionID),登录后的所有服务调用都将使用该令牌进行身份验证

但是登录后我应该如何使用令牌-

1) .通过HTTP(是否可以轻松拦截?)

2) .通过HTTPs(如果每次通话都通过HTTPs进行,是否会出现性能问题?)

您能否就如何在不影响性能的情况下实现安全性提供一些指导

更新

Android应用程序处于混合模式,由WebView和本机活动组成。
如果令牌基于会话,我应该如何维护会话?用户可以登录并长时间处于非活动状态。我应该增加会话超时吗

SSL会对性能产生一些影响,但不会太大(根据我的经验)。我将使用基于以下内容的半安全哈希:


MD5SUM或SHA1以下内容:今天的日期+一些标点符号+用户的一些独特之处(可能是电子邮件等)。这会给你一个看起来像ajadfh28dfj2yadsfh28的长字符串…只要你的Android端以服务器端期望的方式发送它,并且它在用户之间是唯一的,对我来说它将是非常安全的。

SSL会影响性能,但不会太大(根据我的经验)。我将使用基于以下内容的半安全哈希:


MD5SUM或SHA1以下内容:今天的日期+一些标点符号+用户的一些独特之处(可能是电子邮件等)。这会给你一个看起来像ajadfh28dfj2yadsfh28的长字符串…只要你的Android端以服务器端期望的方式发送它,并且它在用户之间是唯一的,对我来说,它将是非常安全的。

要按照WCF/Microsoft推荐的方式执行,你可以使用角色提供程序实现WCF授权

这包括一个IPrincipal和注入您的自定义主体,这将从数据库、LDAP等加载角色

然后,任何WCF方法都可以像这样简单地修饰,以进行授权:

[PrincipalPermission(SecurityAction.Demand, Role = "ADMIN")]
[PrincipalPermission(SecurityAction.Demand, Role = "OPERATOR")]
public void SomeServiceCall(string foo)
{
    // In your case this would be an AJAX endpoint, not a void method
}
这将保护服务呼叫;他们甚至在打电话的人看来都不存在

起点: Microsoft向示例角色提供程序提供源代码


请记住,虽然很多人都这么认为,但并不要求实现一个完全成员资格提供者。为此,您只需要一个自定义验证器和角色提供程序。大部分成员资格提供程序都可以不执行。

要按照WCF/Microsoft推荐的方式执行,您可以使用角色提供程序实现WCF授权

这包括一个IPrincipal和注入您的自定义主体,这将从数据库、LDAP等加载角色

然后,任何WCF方法都可以像这样简单地修饰,以进行授权:

[PrincipalPermission(SecurityAction.Demand, Role = "ADMIN")]
[PrincipalPermission(SecurityAction.Demand, Role = "OPERATOR")]
public void SomeServiceCall(string foo)
{
    // In your case this would be an AJAX endpoint, not a void method
}
这将保护服务呼叫;他们甚至在打电话的人看来都不存在

起点: Microsoft向示例角色提供程序提供源代码


请记住,虽然很多人都这么认为,但并不要求实现一个完全成员资格提供者。为此,您只需要一个自定义验证器和角色提供程序。大部分成员资格提供程序都无法实现。

我建议即使在您获得令牌后也使用SSL。我们的公司处理与银行和健康相关的安全数据有关的项目,我们甚至在令牌实施之后也被授权使用SSL。我们发现,即使使用https,性能仍然在合理的范围内

使用Https不会对性能造成巨大影响,特别是考虑到可能有人在嗅探您的数据包并获取令牌(因为我们不知道用户可能连接到的接入点)

由于SSL基本上需要通过RSA交换密钥和加密算法,因此与SSL相关的开销将在初始握手期间发生。然而,一旦你通过了最初的握手,成本只与数据包的加密/解密有关,这不会对你的应用程序产生巨大影响


作为补充说明,您还可以在应用程序上使用客户端证书实现安全性,以确保只有应用程序才能调用Web服务。这将进一步保护呼叫,因为黑客需要访问证书才能访问服务器。即使他们知道登录名,他们也无法在没有证书的情况下访问端点。

我建议在您获得令牌后使用SSL。我们的公司处理与银行和健康相关的安全数据有关的项目,我们甚至在令牌实施之后也被授权使用SSL。我们发现,即使使用https,性能仍然在合理的范围内

使用Https不会对性能造成巨大影响,特别是考虑到可能有人在嗅探您的数据包并获取令牌(因为我们不知道用户可能连接到的接入点)

由于SSL基本上需要通过RSA交换密钥和加密算法,因此与SSL相关的开销将在初始握手期间发生。然而,一旦你通过了最初的握手,成本只与数据包的加密/解密有关,这不会对你的应用程序产生巨大影响

作为补充说明,您还可以在应用程序上使用客户端证书实现安全性,以确保只有应用程序才能调用Web服务。这将进一步保护呼叫,因为黑客需要访问证书才能访问服务器。即使他们知道登录名,也无法在没有登录名的情况下访问端点