搜尋

首頁  >  問答  >  主體

java - 關於京東單點登入認證的問題


上圖是京東單點認證過程中的一個http請求。

他的過程是這樣的: 就是說目前為首頁www.jd.com ,然後透過發起跨域請求 向sso.jd.hk 發起認證。這個請求中攜帶了cookie同時response中也回傳了cookie。 response中傳回的 的cookie的domina設定為了一級網域名稱。

有幾個問題不解,

(1)這裡是跨域請求, 為什麼request中攜帶了cookie?這個可以嗎 我看了其他朋友說是可以攜帶cookie的

例如 http://blog.csdn.net/wzl002/a... 跨域Ajax請求時是否帶Cookie的設定

但是具體到京東,他是怎麼處理的?

(2)response中設定了cookie,但現在所在的網域並不是jd.hk,而是www.jd.com ,這個能設定嗎
具體到京東是怎麼做的

(3) response中有設定p3p,問題2中所提到的問題是透過這個實現的嗎?

(4)p3p 可以參考 http://blog.csdn.net/ghj1976/...

文章提到:
採用 P3P 之後,您可以設定瀏覽器自動偵測網站是否:收集個人識別資訊、使用這些資訊建立使用者檔案、或允許訪客拒絕資料收集。
具備 P3P 能力的瀏覽器具有一些可供您選擇的預設選項。或者您也可以透過回答問題的方式(例如您願意分享哪些資料、願意接受哪些類型的 Cookie 檔案)自訂您的設定。當您在 Web 瀏覽時,這個軟體會判斷您的隱私權偏好選項是否與網站的資料收集做法相符。

我的理解是: 具備p3p功能的瀏覽器 可以偵測到 跨域寫cookie的情況,透過與使用者互動的方式詢問使用者同不同意跨網域寫cookie?類似經常出現的網頁 alter 提示互動? ? ? ?這個理解感覺不太合理呀,

各位說兩句(^-^)

给我你的怀抱给我你的怀抱2780 天前735

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-05-17 09:59:37

    1. 搞清楚網域和主機的差別。例如www.jd.com是主機名,不是域名,jd.com是域名。在下圖中,如果勾選了hostOnly,則此cookie只在此主機上起作用,換一個主機名稱www1.jd.com就不起作用了。但如果沒有勾選hostOnly,則此cookie在此網域下的任意主機上都是有效的,即使建立此cookie時是在www.jd.com上,但是在www1.jd.com上依然可以讀取到此cookie,也就是說,當瀏覽器造訪www1.jd.com時,會把這個cookie當作request的一部分寄給伺服器。

    1. Ajax的跨域與此不同。 Ajax混淆了網域名稱和主機的差異。在Ajax看來,只要不是在同一台主機上發起的請求,都算是跨域。例如從www.jd.com發起一個ajax請求訪問www1.jd.com上的內容,這也算跨域。嚴格來說,這只算跨主機,不能算跨域,但是由於歷史原因,現在一直是這麼定義的,所以也沒有辦法改正過來了。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-17 09:59:37

    我的建議是自己設計token驗證方式,cookie和http請求回覆只是傳遞token的方式。如果你在redis/memcached裡存這個token,所有節點都可以透過token查詢到目前狀態(是否已驗證),或是獨立寫個服務提供驗證也是一樣的道理。 sso.jd.hk用cookie是為了保存驗證token和時間戳之類的資訊。

    token無需保密,直接回覆token即可。這種模式同樣適合於websocket驗證。

    常用的計算方法:token = sha1(数据ID+过期时间戳+验证密码)

    把token,資料ID,過期時間戳都送給客戶,往其它服務發請求的時候附上這3個信息,因為只有伺服器知道驗證密碼,這樣就可以驗證請求是否來源於另外的服務。 AWS資源驗證方式和這個類似,只不過把驗證密碼換成了你的API密匙而已。

    回覆
    0
  • 取消回覆