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は送信されませんが、何の有効期限や最大エージングされます。どうして ?
私は何が欠けていますか?
なぜクライアントは有効期限を送信する必要がありますか?サーバーは、セッションに保存された有効期限を持つ必要があり、クライアントが送信している情報ではなく、現在の時刻と比較します。クライアントを信頼しないでください! – dunni