HTTP安全认证

来源:互联网 发布:浩方对战平台mac版本 编辑:程序博客网 时间:2024/05/18 22:46

HTTP安全认证

前言:对于基于http协议的通讯来说,http的安全认证是必不可少的一部分知识。
一、基本认证
基本身份验证它提供了一个方法来解决这个问题,虽然不是很安全。基本身份验证,客户端的每个请求发送Base64编码凭据,使用HTTP[授权]头。这意味着每个请求独立于其他请求和服务器可能/不维护客户端,这对可扩展性是非常好的。

下面示出的是准备标头的样本代码。
String plainClientCredentials=”myusername:mypassword”;
String base64ClientCredentials = new String(Base64.encodeBase64(plainClientCredentials.getBytes()));

    HttpHeaders headers = getHeaders();    headers.add("Authorization", "Basic " + base64ClientCredentials);

基本身份验证和Spring Security
有两个步骤,就可以启用基本身份验证在Spring Security配置中。
1. 配置httpBasic : 配置HTTP基本身份验证。 [基于HTTP的XML]

  1. 配置有BasicAuthenticationEntryYiibai认证入口点 : 如果验证失败[无效/缺少凭据],这个切入点将被触发。 这是非常重要的,因为我们不想重定向到身份验证失败的登录页面[Spring Security的默认行为] ,因为这里我们没有一个登录页面。

二、什么是基本认证
1.概念:基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
把 “用户名+冒号+密码”用BASE64算法加密后的字符串放在http request 中的header Authorization中发送给服务端, 这种方式叫HTTP基本认证(Basic Authentication)
2.优缺点:
 HTTP基本认证的优点
  HTTP基本认证,简单明了。Rest API 就是经常使用基本认证的。
  每次都要进行认证
  http协议是无状态的, 同一个客户端对 服务器的每个请求都要求认证。
  HTTP基本认证和HTTPS
  把 “用户名+冒号+密码” 用BASE64加密后的string虽然用肉眼看不出来, 但用程序很容易解密,上图可以看到Fiddler就直接给解密了。 所以这样的http request在网络上,如果用HTTP传输是很不安全的。 一般都是会用HTTPS传输,HTTPS是加密的,,所以比较安全。

三、http认证方式

1.基本认证 Basic
2.摘要认证:Digest
3.Form形式:ajax交互认证。
4.SSL
HTTP基本认证(HTTP Basic authentication)和HTTP摘要认证(HTTP Digest authentication)。
此外常用的还有NTLM、SPNEGO(HTTP协商认证,HTTP Negotiate authentication,是其一种)和Kerberos认证方式

public final class AuthPolicy {
public static final String NTLM = “NTLM”;
public static final String DIGEST = “Digest”;
public static final String BASIC = “Basic”;
public static final String SPNEGO = “negotiate”;
public static final String KERBEROS = “Kerberos”;

private AuthPolicy() {}

}

四、Spring中实现

1.web.xml中配置过滤器


springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy

<filter-mapping>    <filter-name>springSecurityFilterChain</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

2.配置spring-security.xml文件:配置拦击的url和认证的用户和密码(加密方式或者不配置)

参考文档
http://dreamzhong.iteye.com/blog/1134374

原创粉丝点击