HTTP Basic Authorization
来源:互联网 发布:淘宝买家秀大尺度云盘 编辑:程序博客网 时间:2024/06/04 04:10
HTTP基本认证是一种用来允许Web浏览器,或其他客户端程序在请求时提供以用户名和口令形式的凭证的登录方式。用户名追加一个冒号然后串接上口令,得出的结果字符串再用Base64算法编码。例如,用户名是: admin,口令是: admin123,拼接后的结果是: admin:admin123,然后再用Base64编码,得到YWRtaW46YWRtaW4xMjM=。Base64编码的字符串发送出去,并由接收者解码,得到一个由冒号分隔的用户名和口令的字符串。
package com.xiao.http;import java.net.HttpURLConnection;import java.net.URL;public class HTTPBasicAuthorization {/** * HTTP Basic Authentication * * @param address * @param username * @param password * @return * @throws Exception */public static int connection(String address,String username,String password)throws Exception{URL url = new URL(address);HttpURLConnection conn = (HttpURLConnection)url.openConnection();String author = "Basic " + Base64.encode((username + ":" + password).getBytes());conn.setRequestProperty("Authorization", author); conn.connect();return conn.getResponseCode();}/** * @param args */public static void main(String[] args) {try {connection("http://192.168.0.1","admin","admin123");} catch (Exception e) {e.printStackTrace();}}}
服务端:
二. BASIC认证的过程
1. 客户端向服务器请求数据,请求的内容可能是一个网页或者是一个其它的MIME类型,此时,假设客户端尚未被验证,则客户端提供如下请求至服务器:
Get /index.html HTTP/1.0
Host:www.google.com
2. 服务器向客户端发送验证请求代码401,服务器返回的数据大抵如下:
HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm="google.com"
Content-Type: text/html
Content-Length: xxx
3. 当符合http1.0或1.1规范的客户端(如IE,FIREFOX)收到401返回值时,将自动弹出一个登录窗口,要求用户输入用户名和密码。
4. 用户输入用户名和密码后,将用户名及密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容:
Get /index.html HTTP/1.0
Host:www.google.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx
注:xxxx....表示加密后的用户名及密码。
5. 服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端:
三. BASIC认证的缺点
HTTP基本认证的目标是提供简单的用户验证功能,其认证过程简单明了,适合于对安全性要求不高的系统或设备中,如大家所用路由器的配置页面的认证,几乎 都采取了这种方式。其缺点是没有灵活可靠的认证策略,如无法提供域(domain或realm)认证功能,另外,BASE64的加密强度非常低,可以说仅 能防止sohu的搜索把它搜到了。当然,HTTP基本认证系统也可以与SSL或者Kerberos结合,实现安全性能较高(相对)的认证系统
四. BASIC认证的JAVA实现代码
HttpSession session=request.getSession(); String user=(String)session.getAttribute("user"); String pass; if(user==null){ try{ response.setCharacterEncoding("GBK"); PrintWriter ut=response.getWriter(); String authorization=request.getHeader("authorization"); if(authorization==null||authorization.equals("")){ response.setStatus(401); response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\""); out.print("对不起你没有权限!!"); return; } String userAndPass=new String(new BASE64Decoder().decodeBuffer(authorization.split(" ")[1])); if(userAndPass.split(":").length<2){ response.setStatus(401); response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\""); out.print("对不起你没有权限!!"); return; } user=userAndPass.split(":")[0]; pass=userAndPass.split(":")[1]; if(user.equals("111")&&pass.equals("111")){ session.setAttribute("user",user); RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp"); dispatcher.forward(request,response); }else{ response.setStatus(401); response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\""); out.print("对不起你没有权限!!"); return; } }catch(Exception ex){ ex.printStackTrace(); } }else{ RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp"); dispatcher.forward(request,response); }
- HTTP Basic Authorization
- HTTP basic Authorization
- authorization BASIC
- authorization BASIC
- authorization BASIC
- 【HTTP】http 401Basic验证和WWW-Authenticate、Authorization
- HTTP Basic Authorization(附iOS实现方法)
- HTTP Authorization
- 开发CXF客户端通过HTTP Basic Authorization 安全认证的几种办法
- Http Basic Authentication 的请求头Authorization的状态保存问题:见‘斜粗下划线’部分说明
- ajax, 提交basic Authorization
- Jersey Client基于Https的Basic Authorization
- http协议基本认证 Authorization
- WEB应用中的身份验证(1)--基本身份验证BASIC authorization method
- 不论是 Basic Auth 还是 Digest Auth,都会有 Authorization 字段
- Authorization
- Implement basic HTTP authentication
- HTTP: Basic Authentication
- qt中文显示乱码(1)
- 关于datagridview中checkbox列在选中行的情况下无法操作值
- 已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。
- SpinBox引发的一个错误
- 12个高矮不同的人,排成两排/Catalan数
- HTTP Basic Authorization
- xilinx FPGA工程移植遇到的若干问题
- javascript力道上延迟加载
- Cheat—— 给Linux初学者和管理员一个终极命令行"备忘单"
- 关于OC中消息转发机制的理解以及在项目中的实际应用
- SpringMVC之入门案例
- 你的隐私值多少钱?
- 中缀表达式转后缀表达式并计算
- 微新余微信号ivxinyu新余男人需要挣多少钱才能维系一个家庭?很震惊的数据!【