0

我有一个 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

然后在安卓

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");

现在所有这些代码都可以正常工作我只是不明白如何实现在两者之间工作的身份验证。

4

1 回答 1

1

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

  1. 客户端发送密码的登录名和 SHA-1 或 SHA-256 哈希(不要使用其他哈希算法 - 直到您更清楚。SHA-256 选项更好)
  2. 服务器找到该用户的相应密码哈希并将其与客户端发送的值进行比较。如果哈希相同,一切都很好。

此方法要求 SSL 连接完全安全(以防止窃听/重放攻击)

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

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

于 2013-07-22T20:11:56.717 回答