【发布时间】:2013-01-21 09:29:55
【问题描述】:
我的 Android 应用程序应该与一个用 C#.Net 编写的 ASP.net web api 进行通信。从手机发送的数据包含不应向公众公开的数据。所以我正在尝试使用https 协议。在我的服务器端,我要求所有请求都是HTTPS,如下所示:
RequireRegisteredImei
public class RequireRegisteredImeiAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var request = actionContext.ControllerContext.Request;
if (request.RequestUri.Scheme == Uri.UriSchemeHttps)
{
//OKAY
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden);
}
}
}
在控制器中:
[RequireRegisteredImei]
public string Post()
{
}
我通过从我的手机发送一个简单的http request 来调试这段代码,这段代码运行良好,它会拒绝我。
所以,我开始研究如何从我的安卓手机通过https 发送请求。我想出了这样的事情:
public static DefaultHttpClient getSecureHttpClient() {
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
schemeRegistry.register(new Scheme("http", SSLSocketFactory.getSocketFactory(), 80));
BasicHttpParams params = new BasicHttpParams();
SingleClientConnManager mgr = new SingleClientConnManager(params, schemeRegistry);
return new DefaultHttpClient(mgr, params);
}
我就是这样使用这个方法的:
HttpClient httpClient = CustomHttpClient.getSecureHttpClient();
这只会导致IOException: No peer certificate
我已经阅读了几个关于此的主题:
Problems with https (No peer certificate) in android
Android SSL - No Peer Certificate
'No peer certificate' error in Android 2.3 but NOT in 4
但是必须有一种更简单的方法来通过HTTPS 从android 发布数据?
【问题讨论】:
-
从 MVC 的角度来看,已经有一个 RequireHttpsAttribute 强制任何
HTTP调用到HTTPS。 -
@James 所以你的意思是,如果我在这个 url
http://whatever-webservice/api/Login上发帖,它会自动强制连接为HTTPS? -
是的。本质上,它的作用是强制安全地重新发送请求(因此会自动拒绝任何非安全请求)。不确定您是否明确希望您的 API 在发送非安全请求时返回 403。但是,这意味着您的客户端处理该响应的工作量会减少。
标签: c# android web-services https