亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

API 設計 - 一個域上的應用程序,另一個域上的 api。如何在不傳遞用戶 ID 的情況下檢

API 設計 - 一個域上的應用程序,另一個域上的 api。如何在不傳遞用戶 ID 的情況下檢

Go
慕碼人8056858 2021-11-15 20:57:20
我正在嘗試使用 Golang 和 Angular JS 構建一個非常簡單的 Web 應用程序(用于學習目的)。我對 Go 和 AngularJS 代碼很滿意,但在嘗試創建合適的 API 結構時遇到了困難。目前,我將所有運行應用程序的代碼和 API 代碼捆綁在一起。理想情況下,我想將其分開,這樣我就可以讓我的應用程序在 app.mything.com 等子域上運行,而 API 在 api.mything.com 上運行我的問題是我的 API 有 MYSQL 調用,例如 -select * FROM sometable where userid = userIDuserID 是保存在會話中的用戶 ID。因此,雖然所有代碼都捆綁在一起,但這是可能的并且工作正常。如果我要將代碼分離到兩個單獨的子域,則這兩個域都無法訪問會話。怎么可能實現這樣的目標?
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

您仍然可以訪問用戶 ID。

  • 您在 api.domain.com 上的 API 服務器可以在登錄時將 ID 保存在會話 cookie 中。cookie 將用于api.domain.com域。默認情況下使用gorilla/sessions來獲取簽名的 cookie。

  • www.example.com由于瀏覽器對 cookie 強制執行的同源策略,(不同域)上的 Angular 客戶端將根本無法讀取/寫入cookie,但仍會在 AJAX 請求中將 cookie 發送回api.domain.com服務器。

根據 Angular 文檔(https://docs.angularjs.org/api/ng/service/ $http),您需要設置withCredentials = true在跨域請求上發送 cookie(參考:Mozilla CORS 文檔)。發出請求以獲取 cookie(例如通過 HTTPS POST 登錄憑據),然后連續的 AJAX 請求將將該 cookie 呈現給服務器。

另一種方法是發布 OAuth2 不記名令牌(“令牌身份驗證”),在后端(Redis、Bolt、mySQL 等)中記錄令牌 <=> 用戶 ID,并讓 Angular 應用程序將其保存在本地存儲中并將其發送到每個請求的頭部。


查看完整回答
反對 回復 2021-11-15
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

有兩種方法可以解決這個問題:

  • 將會話存儲更改為 API 和應用程序共享的內容(即:MySQL)。

  • 開始使用(加密的)cookie 而不是會話數據。


查看完整回答
反對 回復 2021-11-15
  • 2 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號