- 取代 apigateway 成為 mm-next 與 Israfel(會員系統)和 Content GQL 3.0(CMS GQL)的溝通介面。
- 使用 Firebase Admin SDK 驗證 Firebase ID Token(JWT),將合格的 firebase uid 送往 Israfel,確認使用者的會員資格,WAS 根據會員資格和權限產生使用者專有的 Access Token(JWT),並將其返回給使用者。
- 驗證使用者提供的 Access Token,如果 Token 通過驗證,WAS 會將使用者發送的 requests proxy 到 Israfel 或是 Content GQL 3.0 servers 上。
WAS 會起一個 express server,提供 authentication, authorization 等身份認證功能,並且根據使用者的需求,將 request proxy 到 Israfel, Lilith/mirrormedia 等 internal API servers 上。 註:internal API servers 僅在內部網域中,外部的 requests 一定得經過 WAS API server 才能到達。
WAS 會提供以下 endpoints:
/access-token(POST method): 此 endpoint 會根據使用者提供的 ID token (firebase token) 來核發相對應的 access token。Access token 的 JWT payload 中的scopeproperty 會標示使用者的權限(相關討論可以見 https://github.com/mirror-media/Lilith/pull/176)。/member/graphql(POST method): 此 endpoint 會驗證Authorizationheader,如果 request 有帶的話,確認 access token 是合格的,且將scopeproperty 帶在X-Access-Token-Scopecustom header 後,proxy request 到 Israfel gql server。/content/graphql(POST method): 此 endpoint 會驗證Authorizationheader,如果 request 有帶的話,確認 access token 是合格的,且將scopeproperty 帶在X-Access-Token-Scopecustom header 後,proxy request 到 Lilith/mirrormedia gql server。
以上 endpoints 也都有提供 OPTIONS method,以方便 requests 通過 browser CORS 限制。
$ yarn install
$ yarn dev
// or
$ make dev
$ yarn build
// or
$ make build
// build first
$ make build
// start server
$ make start
// or
$ yarn start
請見檔案 /src/environment-variables.js
- 設定環境變數
BYPASS_AUTHORIZATION為true或1可啟用。 - 啟用後:
/content/graphql與/member/graphql皆不再驗證Authorizationheader。- 代理請求時會將
X-Access-Token-Scope設為read:posts read:member-posts:all,等同所有使用者可讀取所有內容。
- 風險:此設定將開放所有內容,僅供開發/臨時除錯使用,請勿於正式環境長期開啟。
