shell實現https登錄


  • 服務端提供了兩個api:

一個是用於用戶認證,因為要傳輸密鑰,所以用了https方式  如何在服務端配置https請見另外一個博文

https://192.168.1.190:8443/api/auth      參數api_key=***&secret_key=***  [post 方式提交]

另外一個api,普通的http api,只有當通過第一個api的認證后,服務器下發一個cookie,之后的請求帶上cookie,才能訪問到內部頁面,當然cookie對應的session定期失效。

http://192.168.1.190:8081/api/inner      [get 方式提交]

 

  • 下面是客戶端(shell)部分:
[root@centos shell]# curl -v --insecure -d "api_key=test&secret_key=test" https://192.168.1.190:8443/api/auth
* About to connect() to 192.168.1.190 port 8443 (#0)
*   Trying 192.168.1.190... connected
* Connected to 192.168.1.190 (192.168.1.190) port 8443 (#0)
* Initializing NSS with certpath: /etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* skipping SSL peer certificate verification
* SSL connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA
* Server certificate:
*     subject: CN=free4lab,OU=free4lab,O=free4lab,L=beijing,ST=beijing,C=CN
*     start date: 10月 26 11:54:31 2013 GMT
*     expire date:  1月 24 11:54:31 2014 GMT
*     common name: free4lab
*     issuer: CN=free4lab,OU=free4lab,O=free4lab,L=beijing,ST=beijing,C=CN
> POST /api/auth HTTP/1.1
> User-Agent: curl/7.19.7 (i686-pc-linux-gnu) libcurl/7.19.7 NSS/3.12.7.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2
> Host: 192.168.1.190:8443
> Accept: */*
> Content-Length: 28
> Content-Type: application/x-www-form-urlencoded
> 
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Set-Cookie: JSESSIONID=84AB6E3414D8E639959745CBA5DA448F; Path=/; Secure
< Set-Cookie: login_cookie=c7be27c2-fe79-4772-ae2b-dae485da47d8; Expires=Sat, 09-Nov-2013 14:48:17 GMT
< Content-Type: text/html;charset=UTF-8
< Content-Length: 52
< Date: Sat, 26 Oct 2013 14:48:17 GMT
< 
* Connection #0 to host 192.168.1.190 left intact
* Closing connection #0
{"message":"Login succeeded!","status":0,"value":""}

可以看見,我提供正確的api_key和secret_key后,服務端發回兩個cookie並且返回json,提示認證成功。

其中: JSESSIONID是用來定位服務端的session的,簡單的說,客戶端發送http請求時,只有在cookie里帶上了正確的JSESSIONNID,java后端  HttpSession session = request.getSession(); 這樣的語句才能獲取到與之對應的session信息。

所以之后的請求我就都帶上以上兩個cookie信息即可!

[root@centos shell]# curl -v  --cookie "login_cookie=c7be27c2-fe79-4772-ae2b-dae485da47d8;JSESSIONID=84AB6E3414D8E639959745CBA5DA448F" http://192.168.1.190:8081/api/inner
* About to connect() to 192.168.1.190 port 8081 (#0)
*   Trying 192.168.1.190... connected
* Connected to 192.168.1.190 (192.168.1.190) port 8081 (#0)
> GET /api/inner HTTP/1.1
> User-Agent: curl/7.19.7 (i686-pc-linux-gnu) libcurl/7.19.7 NSS/3.12.7.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2
> Host: 192.168.1.190:8081
> Accept: */*
> Cookie: login_cookie=c7be27c2-fe79-4772-ae2b-dae485da47d8;JSESSIONID=84AB6E3414D8E639959745CBA5DA448F
> 
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Content-Length: 81
< Date: Sat, 26 Oct 2013 14:52:53 GMT
< 
* Connection #0 to host 192.168.1.190 left intact
* Closing connection #0
{"message":"authentication succeeded!","status":0,"value":"welcome to home page"}

這樣,我們就用shell腳本實現了https的登錄!

 

  • 用瀏覽器登錄就很簡單了,隨便寫一個html的post代碼
<form action="https://localhost:8443/api/auth" method="post">
  <p>First name: <input type="text" name="api_key" /></p>
  <p>Last name: <input type="text" name="secret_key" /></p>
  <input type="submit" value="Submit" />
</form>

然后輸入api_key和secret_key就認證完成了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM