`
dengyin2000
  • 浏览: 1219025 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

怎样创建安全的Rest WebService API 请求

阅读更多
API Key

当用户注册之后,会给用户一个API Key。这个API Key会附在每个请求的url后面,这个方式的缺点是如果某个人知道你的API Key之后,他就能伪装成那个用户了。 但是如果你的API请求是使用HTTPS(SSL)的方式,就可以避免你的API Key被别人获取了。


API Key + Secret Key签名

比上一种跟复杂的一种方式就是用一个secret key去签名每一刻API URL请求,Amazon Web Services就是使用这种方式。当用户注册完后, 你会给用户2个keys:API Key(比如:username)和secret key(比如password),API key会附在每个请求url上面,但是secret key
不会。secret key是用来签名每个请求的。通常会加上另外一个参数比如(Signature)。

Amazon会把所有的请求信息作为请求的参数,然后按照参数名排序,再按照secret key进行hash。这个hash的值会作为一个新的参数(Signature)附加到请求的url上。在server端做相同的事情,获得所有的参数(除了Signature),排序,用sercet key hash,如果这个值跟传过来的Signature参数的值相等的话,则认为这个请求是合法的。



下面的是引用Amazon Web Services文档中的内容。

For example, the following is a Query string (linebreaks added for clarity).

引用
?Action=DescribeImages
&AWSAccessKeyId=10QMXFEV71ZS32XQFTR2
&SignatureVersion=1
&Timestamp=2006-12-08T07%3A48%3A03Z
&Version=2007-01-03


For the preceding Query string, you would calculate the HMAC signature over the following string.
引用
(linebreaks added for clarity)
      ActionDescribeImages
      AWSAccessKeyId10QMXFEV71ZS32XQFTR2
      SignatureVersion1
      Timestamp2006-12-08T07:48:03Z
      Version2007-01-03


Using the preceding string and the secret key DMADSSfPfdaDjbK+RRUhS/aDrjsiZadgAUm8gRU2 the
base64 encoded signature is as follows:
GjH3941IBe6qsgQu+k7FpCJjpnc=

The following is a Java code sample to compute the signature from the string and the private key.

引用
import java.security.SignatureException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class HmacExample
{
    private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";
/**
* Computes RFC 2104-compliant HMAC signature.
     *
     * @param data
     *     The data to be signed.
     * @param key
     *     The signing key.
     * @return
     *     The base64-encoded RFC 2104-compliant HMAC signature.
     * @throws
     *     java.security.SignatureException when signature generation fails
     */
    public static String calculateRFC2104HMAC(String data, String key)
          throws java.security.SignatureException
    {
       String result;
       
        try {
            // get an hmac_sha1 key from the raw key bytes
            SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(),
             HMAC_SHA1_ALGORITHM);
            // get an hmac_sha1 Mac instance
            // and initialize with the signing key
            Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
            mac.init(signingKey);
            // compute the hmac on input data bytes
            byte[] rawHmac = mac.doFinal(data.getBytes());
            // base64-encode the hmac
            result = Base64.encodeBytes(rawHmac);
        }
        catch (Exception e) {
            throw new SignatureException("Failed to generate HMAC : "
                + e.getMessage());
        }
       
     return result;
     }
       
}

分享到:

相关推荐

    rest webservice demo spring

    这个"rest webservice demo spring"项目可能是为了展示如何在Spring环境中集成Jersey,创建RESTful Web服务,以及如何处理请求和响应。通过分析和运行这个示例,开发者可以深入理解RESTful服务的设计原则和Spring...

    REST WebService简单应用

    在"REST WebService简单应用"这个主题中,可能涉及的知识点包括如何创建一个简单的RESTful服务,使用JAX-RS(Java API for RESTful Web Services)框架,这是一个Java平台上的REST实现。JAX-RS提供了一种声明式的...

    什么是REST,符合REST的API叫RESTful 两种SOA接口实现:SOAP(WebService) vs REST

    文件`rest(一种软件架构风格)_百度百科.url`和`SOA接口的两种常用实现比较:SOAP(WebService) vs REST(GET,POST).url`分别指向了关于REST和SOAP/REST比较的参考资料,它们可以进一步深入理解这两种接口实现的区别...

    REST WebService简单应用(测试)

    在“REST WebService简单应用(测试)”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **RESTful API设计原则**: - **资源定位(URI)**:每个资源都有一个唯一的URI(统一资源标识符),例如`/users/{...

    Android成功调用REST WebService

    总结,这个项目展示了Android如何利用REST WebService与Java后台进行数据交互,通过Retrofit等工具实现了高效、安全的网络通信。理解这些知识点对于开发任何Android应用来说都至关重要,特别是涉及到网络功能的应用...

    rest webservice demo

    这个"rest webservice demo"将帮助新手理解REST服务的工作原理,并通过实际操作学习如何在Java环境中创建和测试REST接口。通过逐步实践,你可以掌握如何处理不同类型的HTTP请求,如何序列化和反序列化数据,以及如何...

    SOAP UI 5.5 WebService API 调用工具

    SOAP UI 5.5 是一款强大的 WebService API 测试与调用工具,尤其适用于接口(API)开发人员。它提供了一种直观且功能丰富的界面,让开发者能够方便地测试、调试和验证 SOAP 和 RESTful Web 服务。在这个压缩包文件中...

    Android+REST WebService服务方式手机开发

    这篇博文“Android+REST WebService服务方式手机开发”可能详细介绍了如何在Android平台上利用RESTful API进行网络通信。REST架构风格强调资源的表述,通过标准的HTTP方法(如GET、POST、PUT、DELETE)来操作这些...

    rest webservice开发流程

    在本教程中,我们将深入探讨REST Web服务的开发流程,包括服务端和客户端的开发调用。 1. **理解REST原则** - 资源:REST中的核心是资源,每个资源都有一个唯一的URI(统一资源标识符)。 - 动词:使用HTTP方法...

    REST WebService与SOAP WebService的比较.docx

    **REST (Representational State Transfer) WebService 和 SOAP (Simple Object Access Protocol) WebService 是两种不同的 Web Service 技术,它们在 SOA(Service-Oriented Architecture,面向服务架构)领域中...

    webService创建过程

    在Java中,创建Web服务通常使用SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)这两种主流的架构风格。下面将详细介绍WebService的创建过程,并结合提供的项目源码进行解析。 1. ...

    JS调用WEBSERVICE的demo

    3. **发送请求**:使用XMLHttpRequest或fetch API发送请求到Web Service的URL。 4. **处理响应**:当服务端返回响应时,JavaScript会触发onreadystatechange或then/catch回调,此时可以解析返回的数据,通常是XML、...

    C#利用Socket创建webservice

    【C#利用Socket创建Web服务】是通过C#编程语言基于.NET Framework 3.5或2.0版本,使用Socket类来实现的一种自定义通信协议的服务。Socket在计算机网络编程中扮演着重要的角色,它是应用层与传输层的接口,允许程序...

    rest webservice guide.pdf

    3. **安全性考虑**:讨论安全相关的最佳实践,例如如何实现身份验证和授权机制。 ### 总结 通过本指南的学习,开发者可以系统地了解RESTful Web服务的概念及其在Jersey框架中的实现方式。从安装配置到实际开发和...

    Rest Webservice(英)

    REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于约束条件和架构原则。RESTful Web Services 是一种遵循 REST 风格构建的 Web 服务。它提倡使用 HTTP 协议来实现客户端与...

    axis2实现webservice请求

    在 Axis2 中实现 WebService 请求涉及以下步骤: 1. **环境设置**:首先,你需要在你的项目中引入 Axis2 相关的 jar 包。这些 jar 包通常包括 Axis2 的核心库、XML 解析器、依赖的 Servlet API 等。在提供的资源包...

    rest风格webservice

    在初学者编写REST风格的Web服务时,通常会用到一些开发工具和技术,如Java的Spring Boot框架,它提供了方便的REST API支持;或者Node.js的Express框架,它们简化了REST服务的开发过程。开发者需要理解HTTP协议,掌握...

    在同一个系统里用cxf 实现SOAP 协议和RESTful风格 两种类型的webservice接口

    2. 实现服务端点:创建实现服务接口的类,处理客户端请求。 3. 配置CXF:在Spring配置文件中,配置CXF的Servlet,指定服务接口和实现类。 4. 启动服务:部署应用,CXF会自动暴露SOAP Web服务。 接下来,我们讨论...

Global site tag (gtag.js) - Google Analytics