防火牆內 OAuth 2.0 的使用
不得不承認,在 firewall
之內網路環境太複雜了。不過這個大多數人都不會如此強烈明顯地感知到。 在此記錄一下最近碰到的一個做 Google +
第三方登錄的時候碰上的問題和解決辦法。
問題的具體表現在於:通過 passport
這個庫,走 OAuth 2.0
協議以便拿到第三方授權來做登錄模塊,但依舊拿不到第三方服務提供商 Google +
返回來的 access token
,最終沒辦法拿到用戶的信息。 得到的返回消息是:
InternalOAuthError: Failed to obtain access token
而 status of 500 和 Internal Server Error 的錯誤讓我感覺是網路的問題。 即便是通過系統的網路設置裡邊,吧 localhost
從 「忽略主機或域的代理設置」 列表當中去掉也無濟於事。
在 Stack Overflow
上搜索到的答案也沒能夠直接解決問題,但是因此得到了一些啟發:去 OAuth
依賴庫裡邊修改源碼,手動讓其去走代理線路。 在 your_project/node_modules/oauth/lib/oauth2.js
目錄中做如下修改:
var querystring= require(querystring), crypto= require(crypto), https= require(https), http= require(http), URL= require(url), OAuthUtils= require(./_utils);// line codes to addvar HttpsProxyAgent = require(https-proxy-agent);let httpsProxyAgent = nullif (process.env[https_proxy]) { httpsProxyAgent = new HttpsProxyAgent("http://127.0.0.1:1087"); // fill in your proxy agent ip and port}.... // line codes to add options.agent = httpsProxyAgent; this._executeRequest( http_library, options, post_body, callback ); }exports.OAuth2.prototype._request= function(method, url, headers, post_body, access_token, callback) { ...
重新運行代碼,便可以在 callback function 當中拿到所需要的 profile 數據。
推薦閱讀:
※信息安全的核心:CIA三元組 | 安全千字文系列1
※2018全國重點城市互聯網工程師浄流入分布TOP10
※CVE-2018-8174:IE最新漏洞分析
※雲安全涉及的內容到底包含幾個意思
※發現「全能挖礦木馬」 挖礦泄密DDoS攻擊樣樣精通
TAG:網路安全 |