2016-07-31 7 views
0

javaでNetty.ioフレームワークを使用してサーバーを構築しており、要求の認証に問題があります。なぜcURLはクッキーの有効期限/最大有効期限の値をサーバーに送り返しませんか?

要求を認証している間、私はセッションIDをチェックして、それを検証しようとしていますし、それが有効期限です。

if (sessionId == correctSessionId && expiry < currentTime) { 
    // then mark the request as authenticated. 
} 

しかし、私は(私がログインと有効期限との適切なクッキーを受け取った後に)要求をサーバーに送信するたびに、/最大エージングは​​有効期限がないサーバ側で受信しました。私は間違って何をしていますか?ログインするための

カール要求:

curl -b cookies.txt -c cookies.txt -POST http://localhost:8080/api/v1/account/login -H 'content-type: application/json' -d '{"mobile": "123", "password": "123"}' -v 

出力:

* Trying ::1... 
* Connected to localhost (::1) port 8080 (#0) 
> POST /api/v1/account/login HTTP/1.1 
> Host: localhost:8080 
> User-Agent: curl/7.43.0 
> Accept: */* 
> content-type: application/json 
> Content-Length: 36 
> 
* upload completely sent off: 36 out of 36 bytes 
< HTTP/1.1 200 OK 
* Replaced cookie sessionId="efB9DYHl46aARJMtW59fSKuf+wVtpZ0Y0eveJiLMLH+lEBfvHjzaow==" for domain localhost, path /api/v1/account/, expire 1469968200 
< Set-Cookie: sessionId=efB9DYHl46aARJMtW59fSKuf+wVtpZ0Y0eveJiLMLH+lEBfvHjzaow==; Max-Age=180; Expires=Sun, 31 Jul 2016 12:30:00 GMT 
* no chunk, no close, no size. Assume close to signal end 
< 
* Closing connection 0 
{"id":"579d3d9902dd1134817edefc","name":"admin","mobile":"123","email":null,"audit":{"createdTime":1469922712940,"createdBy":null,"modifiedTime":1469922712940,"modifiedBy":null}} 

お知らせSet-Cookieヘッダーと、それが有効期限です。サーバーが正しく送信します。

Cookies.txtファイル:

# Netscape HTTP Cookie File 
# http://curl.haxx.se/docs/http-cookies.html 
# This file was generated by libcurl! Edit at your own risk. 

localhost FALSE /api/v1/account/ FALSE 1469968200 sessionId efB9DYHl46aARJMtW59fSKuf+wVtpZ0Y0eveJiLMLH+lEBfvHjzaow== 

cookies.textも正しく値を格納します。

認証が必要なリソースにアクセスするためのカール要求:

curl -c cookies.txt -b cookies.txt -XGET http://localhost:8080/api/v1/account/details -H 'content-type: application/json' -v 

そして、それは出力です:

* Trying ::1... 
* Connected to localhost (::1) port 8080 (#0) 
> GET /api/v1/account/details HTTP/1.1 
> Host: localhost:8080 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Cookie: sessionId=efB9DYHl46aARJMtW59fSKuf+wVtpZ0Y0eveJiLMLH+lEBfvHjzaow== 
> content-type: application/json 
> 
< HTTP/1.1 401 Unauthorized 
* no chunk, no close, no size. Assume close to signal end 
< 
* Closing connection 0 
Session Unauthorized. Please login% 

のSessionIdは送信されませんが、何の有効期限や最大エージングされます。どうして ?

私は何が欠けていますか?

+2

なぜクライアントは有効期限を送信する必要がありますか?サーバーは、セッションに保存された有効期限を持つ必要があり、クライアントが送信している情報ではなく、現在の時刻と比較します。クライアントを信頼しないでください! – dunni

答えて

1

curlはHTTPクッキープロトコル(RFC6265を参照)に従うので、クライアントはそれを返信しません。クライアントは各クッキーに対してname=valのみを送信する必要があると言います。期限切れ時間およびその他のメタデータは、サーバーによって送信され、クライアントによって処理されますが、返されることはありません。

関連する問題