如何使用WCF和Android实现安全/身份验证。请包含示例

时间:2013-07-22 19:30:01

标签: android wcf security authentication

我有一个Wcf Web服务和一个调用服务方法的android应用程序。需要进行某种身份验证,最好使用用户名/密码组合。数据不敏感,但我只需要从android应用程序访问该服务。非常感谢任何帮助。

我有多种与此非常相似的方法

<OperationContract()> _
<WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json, BodyStyle:=WebMessageBodyStyle.WrappedResponse, UriTemplate:="endpoint?busUnit={busUnit}")> _
Function lstJobsSVC(busUnit As String) As List(Of JobsView)

然后我在服务中实现如下方法

Public Function lstJobsSVC(busUnit As String) As List(Of JobsView) Implements IService1.lstJobsSVC
    Dim entities As New RemoteTimeEntities()
    WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8"

    Return entities.lstJobs(busUnit).ToList
End Function

然后在android

URL json = new URL("http://localhost/json/Service1.svc/"+ "functions endpoint";                 
                HttpURLConnection jc = (HttpURLConnection) json.openConnection();                   
                BufferedReader reader = new BufferedReader(new InputStreamReader(jc.getInputStream()));
                readLine = reader.readLine();
                JSONObject jsonResponse = new JSONObject(readLine);
                JSONArray jsonArray = jsonResponse.getJSONArray("get json array name");

现在所有这些代码都运行良好我只是不明白如何实现两者之间可用的身份验证。

1 个答案:

答案 0 :(得分:1)

我假设你让呼叫本身正常工作。如果是这样,验证客户端的最简单(但足够安全)的方法是:

  1. 客户端发送密码的登录和SHA-1或SHA-256哈希值(不要使用其他哈希算法 - 直到你知道它更好.SHA-256选项更好)
  2. 服务器找到该用户的相应密码哈希,并将其与客户端发送的值进行比较。如果哈希是相同的,一切都很好。
  3. 此方法要求SSL连接完全安全(以防止窃听/重放攻击)

    如果您需要将数据限制为仅限Android应用,则需要使用仅由服务器和客户端应用程序都知道的AES密钥加密有效负载。仅使用CBC或CTR模式。

    如果需要,您可以将两种方法结合使用。但请记住,安全性是一个非常棘手的问题,我所描述的方法只是“非常好”。如果您不确切知道自己在做什么,请不要在应用程序中放置机密信息。