`

REST安全实践·1.HTTP BASIC认证

阅读更多

1. JDBCRealm + BASIC认证

  • Accesses authentication information stored in a relational database, accessed via a JDBC driver.
  • 通过JDBC访问关系型数据库,获取认证信息

1.1 创建Realm所需的数据表

  • 导出 mysqldump simple_service_book -uroot -p security.sql
  • 导入 mysql -uroot -p < security.sql
DROP DATABASE IF EXISTS `simple_service_book`;
CREATE DATABASE `simple_service_book`;
USE `simple_service_book`;
CREATE TABLE `simple_book` (
  `BOOKID` int(11) NOT NULL AUTO_INCREMENT,
  `BOOKNAME` varchar(128) DEFAULT NULL,
  `PUBLISHER` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`BOOKID`),
  UNIQUE KEY `BOOKID` (`BOOKID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `simple_book` WRITE;
INSERT INTO `simple_book` VALUES (1,'Java Restful Web Service使用指南','cmpbook'),
(2,'JSF2和RichFaces4使用指南','phei');
UNLOCK TABLES;

CREATE TABLE `user_roles` (
  `user_name` varchar(15) NOT NULL,
  `role_name` varchar(15) NOT NULL,
  PRIMARY KEY (`user_name`,`role_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `user_roles` WRITE;
INSERT INTO `user_roles` VALUES ('caroline','user'),('eric','admin');
UNLOCK TABLES;

CREATE TABLE `users` (
  `user_name` varchar(15) NOT NULL,
  `user_pass` varchar(15) NOT NULL,
  PRIMARY KEY (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `users` WRITE;
INSERT INTO `users` VALUES ('caroline','zhang'),('eric','han');
UNLOCK TABLES;

1.2 配置JDBCRealm

$CATALINA_BASE/conf/server.xml

<Realm className="org.apache.catalina.realm.JDBCRealm" 
driverName="org.gjt.mm.mysql.Driver"  
connectionURL="jdbc:mysql://localhost:3306/simple_service_book?user=root&amp;password=root"
userTable="users" 
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles"
roleNameCol="role_name"/>

http://tomcat.apache.org/tomcat-7.0-doc/config/realm.html

Eclipse内置Tomcat配置 eclipse.server.xml

1.3 数据库驱动

拷贝Mysql的JDBC驱动到$CATALINA_HOME/lib目录。使用Maven的项目可以从本地仓库取得,否则从网上搜吧。

M2_REPO/mysql/mysql-connector-java/5.1.25/mysql-connector-java-5.1.25.jar 
(仓库地址举例:M2_REPO=C:\Users\hanl\.m2\repository)

1.4 配置应用的web.xml

/security-rest/src/main/webapp/WEB-INF/web.xml

<security-constraint>
    <web-resource-collection>
        <url-pattern>/webapi/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>UPDATE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/webapi/*</url-pattern>
        <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

Tomcat将调用Realm.authenticate()对首次访问的用户进行认证。认证通过后被缓存在Tomcat(对于FORM-based authentication, 直到session失效,对于 BASIC authentication,直到关闭浏览器)

1.5 BASIC认证

C:\Users\hanl.m2\repository\org\apache\tomcat\tomcat-catalina\7.0.42\tomcat-catalina-7.0.42-sources.jar

Realm.authenticate() basic-handling

basic-handlingbase64(username:password) basic-handling

1.6 应用权限测试

测试工具 Chrome插件POSTMAN

测试用例1

测试地址=http://localhost:8080/security-rest/webapi/books

测试方法=GET

测试用户=无

测试结果=**401 Unauthorized**

basic.guest

测试用例2

测试地址=http://localhost:8080/security-rest/webapi/books

测试方法=GET

测试用户=caroline role=user

测试结果=**200 OK**

basic.user.get

测试用例3

测试地址=http://localhost:8080/security-rest/webapi/books

测试方法=POST

测试用户=caroline role=user

测试结果=**403 Forbidden**

basic.user.post

测试用例4

测试地址=http://localhost:8080/security-rest/webapi/books

测试方法=POST

测试用户=eric role=admin

测试结果=**200 OK**

basic.admin.post

2
1
分享到:
评论

相关推荐

    Artifactory-REST-examples.zip

    这些示例通常包含了完整的HTTP请求构造、认证过程、错误处理等细节,是学习和实践Artifactory REST API的宝贵资源。 总的来说,“Artifactory REST Examples”是掌握Artifactory操作的关键,通过实际的代码示例,...

    RestAPI.rar

    4. **认证与授权**:REST API的安全性很重要,常见的认证方式有Basic Auth、OAuth 2.0、JWT(JSON Web Tokens)等。授权则控制用户对资源的访问权限。 5. **错误处理**:良好的REST API应该提供明确的错误响应,...

    Building a Rest API with Spring

    本文主要介绍了使用Spring框架构建REST API的全过程,内容包括了从基础的Spring Web应用搭建,到使用Java配置,再到通过Spring Security进行安全认证和授权,以及REST API的其他重要特性,例如:使用HTTP消息转换器...

    Django REST framework讲义PDF全集,中文文档PDF版

    DRF提供多种认证策略,如BasicAuthentication、TokenAuthentication等,以及授权类,如IsAuthenticated、IsAdminUser等。开发者可以根据需求选择合适的策略和类,确保API的安全性。 五、权限管理 权限管理是控制...

    基于django restframework.zip

    4. 认证与授权:Django REST framework内置了多种认证和授权策略,如Basic Auth、Token Auth、Session Auth等,可以根据项目需求选择合适的方式确保API的安全性。 5. 权限控制:框架允许自定义权限类,以便根据用户...

    webservice认证和调用

    2. **摘要认证(Digest Authentication)**:相比基本认证,摘要认证更加安全。它使用哈希函数对密码进行处理,避免了明文传输密码的风险。 3. **WS-Security**:这是一种为Web服务提供安全的规范,包括签名、加密...

    odoo rest api

    1. **认证**:访问Odoo REST API通常需要认证,这可以是Basic Auth(基础认证)或者OAuth2。基础认证通过在HTTP头中添加Authorization字段,值为"Basic "加上Base64编码的用户名和密码。 2. **URL结构**:API请求的...

    WebApi认证共8页.pdf.zip

    1. 认证基础:认证是验证用户身份的过程,是安全系统的关键组成部分。WebApi支持多种认证机制,如Basic Authentication、Digest Authentication、Windows Authentication和OAuth2等。理解这些机制的工作原理和应用...

    Advanced REST client

    5. **认证管理**: 支持多种身份验证机制,如Basic Auth、OAuth 1.0/2.0、JWT等。 6. **响应解析**: 自动解析并格式化响应内容,支持JSON、XML、HTML等常见格式。 7. **历史记录**: 保存请求历史,方便用户回顾和重复...

    基于springboot+sureness的面向REST API资源无状态认证权限管理系统.zip

    综上所述,该毕业设计项目涉及了现代Web服务开发中的多个关键技术和最佳实践,包括微服务架构、RESTful API设计、无状态认证、权限控制以及安全性等方面,对于学习和掌握这些技术有很好的实践价值。

    H3C CAS REST API接口

    正文: H3C CAS(Cloud Operating System)是华三通信公司推出的...在进行系统集成或二次开发时,务必确保遵循最佳实践,保证代码的安全性和可维护性,同时考虑到性能优化,以确保高效地利用H3C CAS提供的云基础设施。

    PyPI 官网下载 | django_restframework_apiview-1.3.26.tar.gz

    **PyPI 官网下载 | django_restframework_apiview-1.3.26.tar.gz** 这个压缩包文件“django_rest...为了充分利用这个扩展,需要了解Django REST Framework的基本原理和最佳实践,以确保高效、安全地集成和使用。

    django-rest-framework 官方文档

    1. **Django REST Framework概述** Django REST Framework是一个强大的和灵活的工具包,它简化了在Django项目中构建Web API的过程。它提供了许多开箱即用的功能,如序列化、认证、权限管理、分页以及各种HTTP方法的...

    odoo rest_api

    1. **RESTful架构**:REST API遵循RESTful设计原则,它是一种网络应用程序的设计风格和开发方式,基于HTTP协议,使用URI(Uniform Resource Identifier)来定位资源,通过HTTP方法(GET、POST、PUT、DELETE等)来...

    谷歌插件Advanced-REST-client

    4. **认证支持**: 提供了对OAuth、Basic Auth、Digest Auth等多种认证方式的支持,方便处理需要身份验证的API接口。 5. **环境变量**: 用户可以创建并管理自己的环境变量,用于快速填充请求参数,提高工作效率。 6...

    SuperMap iclient for javascript使用token安全认证

    1. **Token安全认证原理**: Token安全认证是一种基于令牌的身份验证方法。在客户端请求服务时,需要先向服务器申请一个临时的、唯一的Token。这个Token包含了用户的身份信息,服务器在接收到请求时会验证Token的...

    REST项目组技术交流课件

    - 常见的认证方式有Basic Auth、Bearer Token(OAuth2)和JWT(JSON Web Tokens)。 - 授权则涉及到角色和权限管理,如RBAC(Role-Based Access Control)。 9. **API版本控制**: - 为了保持向后兼容,REST API...

    Spring REST

    在安全性方面,REST服务可以通过基本认证(Basic Auth)或OAuth2.0等机制提供安全控制,确保数据和接口的访问安全。 对于大数据集的处理,分页是一种有效的策略。分页允许客户端分批次获取数据,从而提高性能并减少...

    重写Django REST framework源码demo

    1. **接口描述**:在Django REST framework中,你可以通过创建`api_view`装饰器或者继承`APIView`类来定义API视图。为了添加接口描述,可以考虑创建一个自定义的`SchemaGenerator`,它负责生成OpenAPI规范的描述。...

    Java无状态系统的优化实践.pdf

    - **安全性策略**:采用不同的认证机制,如OAuth2、OpenID或基本认证(basic-authentication)。 #### 5. 性能瓶颈与优化策略 无状态系统在优化时常常面临几个主要的性能瓶颈: - **单API吞吐量低**:当API连接...

Global site tag (gtag.js) - Google Analytics