Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Security 如何保护我的应用程序的在线API?_Security_Login_Passwords_Basic Authentication - Fatal编程技术网

Security 如何保护我的应用程序的在线API?

Security 如何保护我的应用程序的在线API?,security,login,passwords,basic-authentication,Security,Login,Passwords,Basic Authentication,我正在为Windows Phone和Android创建一个应用程序。所以,现在我正在构建一个他们都可以使用的webapi,但我想在我的应用程序可以使用它的情况下保护它。我该怎么做呢?我的应用程序中没有其他人可以访问这些API 我不想实现OAuth 我想到了两种情况: 首先(我在客户端存储用户名和散列密码): https/ssl上的基本身份验证,就是这样 Second(我在客户端上存储accesstoken): 通过https/ssl进行基本身份验证以接收访问令牌 为了获取访问令牌,用户向r

我正在为Windows Phone和Android创建一个应用程序。所以,现在我正在构建一个他们都可以使用的webapi,但我想在我的应用程序可以使用它的情况下保护它。我该怎么做呢?我的应用程序中没有其他人可以访问这些API

我不想实现OAuth

我想到了两种情况:

首先(我在客户端存储用户名和散列密码):

  • https/ssl上的基本身份验证,就是这样
Second(我在客户端上存储accesstoken):

  • 通过https/ssl进行基本身份验证以接收访问令牌
  • 为了获取访问令牌,用户向requestoken发送一个请求,以验证客户端和服务器是否都知道clientsecret
  • 对于每个API调用,都必须发送accesstoken以检查访问
我看到的第二种方法的问题是,服务器向客户机发送accesstoken,如果任何人在哪里获得它,他们将拥有用户的访问权


在现实世界中是如何做到的?

您可以先对稍加修改:

  • 在客户端上存储用户名和密码
  • https上的基本身份验证
在客户端上存储密码散列,然后发送散列并将其与数据库中的散列进行比较,相当于在数据库中存储纯文本密码,因为散列将成为密码。因此,你的应用程序应该像任何人类用户一样使用用户名和密码进行身份验证

但你对第二种方法的担忧也适用。如果有人截获了消息,他就有你的证件

更安全的解决方案是HMAC身份验证(现在我们谈论的是“真实世界”)

  • 用户拥有存储在服务器和客户端上的密钥
  • 每个请求都被规范化(转换为一个不同的字符串,其中包含请求方法、URI、参数和时间戳)
  • 规范化请求通过HMAC使用密钥进行散列,散列和用户id在HTTP
    Authorization
    头中传递
  • 在服务器上,使用相同的算法生成散列(带有来自HTTP
    Date
    头的时间戳),并与发送的散列进行比较
  • 如果结果相等,则对请求进行身份验证

一个例子是-链接文档也是如何为自己的API实现它的一个很好的例子。

您可以先对稍作修改:

  • 在客户端上存储用户名和密码
  • https上的基本身份验证
在客户端上存储密码散列,然后发送散列并将其与数据库中的散列进行比较,相当于在数据库中存储纯文本密码,因为散列将成为密码。因此,你的应用程序应该像任何人类用户一样使用用户名和密码进行身份验证

但你对第二种方法的担忧也适用。如果有人截获了消息,他就有你的证件

更安全的解决方案是HMAC身份验证(现在我们谈论的是“真实世界”)

  • 用户拥有存储在服务器和客户端上的密钥
  • 每个请求都被规范化(转换为一个不同的字符串,其中包含请求方法、URI、参数和时间戳)
  • 规范化请求通过HMAC使用密钥进行散列,散列和用户id在HTTP
    Authorization
    头中传递
  • 在服务器上,使用相同的算法生成散列(带有来自HTTP
    Date
    头的时间戳),并与发送的散列进行比较
  • 如果结果相等,则对请求进行身份验证
一个例子是——链接文档也是如何为自己的API实现它的一个很好的例子