2017-10-05 72 views
1

網絡上的一些搜索後,我發現,使用GraphQL當智威湯遜認證的最好的方法是通過將JWT令牌到GraphQL上下文。通過這樣做,解析器可以訪問它並檢查用戶是否已登錄,是否具有權限等。認證與JWT使用GraphQL

我想知道是否需要將認證邏輯/功能置於需要認證的每個解析器中。有沒有一種方法可以默認設置(例如中間件)對除login/logout/register/forgotpasword之外的每個查詢進行的身份驗證?

回答

0

無需在解析器中進行檢查。您可以在服務器端添加中間件。

const graphQLServer = express(); 
 
graphQLServer.use('/graphql', function(req, res, next) { 
 
    var token = req.headers.token; 
 
    if (token != null && token != 'undefined') { 
 
    //Do token verification here 
 
    next(); 
 
    } else { 
 

 
    // if there is no token 
 
    // return an error 
 
    return res.status(403).send({ 
 
     success: false, 
 
     message: 'No token provided.' 
 
    }); 
 
    } 
 
})

剛剛嘗試這一點

1

這個問題彈出,每隔一段時間,但不足以進行了討論。我認爲答案不在於技術,而在於哪種方式最適合您的需求。

採用GraphQL,當要留神是很重要的;

  • 你不必放棄對REST
  • 你可以有

這是基於一些建議,我的經驗與實施GraphQL

多個 GraphQL端點驗證

對於登錄/註銷/忘記密碼和整個家當,考慮去老-SCH OOL。 Form Post +服務器端渲染,REST API幾十年來爲我們提供了良好的服務。許多第三方認證服務都基於此(Facebook登錄,Google,OAuth2等)。我傾向於避免爲此使用GraphQL。

授權

的邏輯來檢查請求者是否授權訪問GraphQL可以推廣到2級

GraphQL服務

基本上你檢查,看看是否請求者被授權使用GraphQL服務。通常,更容易檢查請求者是否已通過身份驗證,否則完全拒絕訪問服務。這通常是通過Web服務器中間件來完成的。

有時您需要向匿名用戶公開一些GraphQL查詢,而且我傾向於擁有另一個「無限制」的GraphQL端點。這個端點往往幾乎沒有或沒有突變,暴露了有限的信息子集和有限的嵌套查詢。

基本上,你看看數據,並決定哪些信息/操作公衆和這不是。 IMO比單個GraphQL端點更容易管理和安全,並且在每個查詢路徑/解析器中實現授權檢查點。

細粒度授權

在這個階段基本上,所有請求者被認證的用戶。我們可能需要質疑:

  • 請求者是否是當前查看其信息的用戶?
  • 是請求者,其信息正在查看用戶的朋友嗎?
  • 請求者是否是當前查看其信息的公司的成員?

這是投入解析器(或模型)檢查邏輯真的很有意義。我個人認爲,解決方案是一個很好的選擇。加上DataLoader的實施仍然可以快速有效。

希望這會有所幫助!