網絡上的一些搜索後,我發現,使用GraphQL當智威湯遜認證的最好的方法是通過將JWT令牌到GraphQL上下文。通過這樣做,解析器可以訪問它並檢查用戶是否已登錄,是否具有權限等。認證與JWT使用GraphQL
我想知道是否需要將認證邏輯/功能置於需要認證的每個解析器中。有沒有一種方法可以默認設置(例如中間件)對除login/logout/register/forgotpasword之外的每個查詢進行的身份驗證?
網絡上的一些搜索後,我發現,使用GraphQL當智威湯遜認證的最好的方法是通過將JWT令牌到GraphQL上下文。通過這樣做,解析器可以訪問它並檢查用戶是否已登錄,是否具有權限等。認證與JWT使用GraphQL
我想知道是否需要將認證邏輯/功能置於需要認證的每個解析器中。有沒有一種方法可以默認設置(例如中間件)對除login/logout/register/forgotpasword之外的每個查詢進行的身份驗證?
無需在解析器中進行檢查。您可以在服務器端添加中間件。
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.'
});
}
})
剛剛嘗試這一點
這個問題彈出,每隔一段時間,但不足以進行了討論。我認爲答案不在於技術,而在於哪種方式最適合您的需求。
採用GraphQL,當要留神是很重要的;
這是基於一些建議,我的經驗與實施GraphQL
對於登錄/註銷/忘記密碼和整個家當,考慮去老-SCH OOL。 Form Post +服務器端渲染,REST API幾十年來爲我們提供了良好的服務。許多第三方認證服務都基於此(Facebook登錄,Google,OAuth2等)。我傾向於避免爲此使用GraphQL。
的邏輯來檢查請求者是否授權訪問GraphQL可以推廣到2級
基本上你檢查,看看是否請求者被授權使用GraphQL服務。通常,更容易檢查請求者是否已通過身份驗證,否則完全拒絕訪問服務。這通常是通過Web服務器中間件來完成的。
有時您需要向匿名用戶公開一些GraphQL查詢,而且我傾向於擁有另一個「無限制」的GraphQL端點。這個端點往往幾乎沒有或沒有突變,暴露了有限的信息子集和有限的嵌套查詢。
基本上,你看看數據,並決定哪些信息/操作公衆和這不是。 IMO比單個GraphQL端點更容易管理和安全,並且在每個查詢路徑/解析器中實現授權檢查點。
在這個階段基本上,所有請求者被認證的用戶。我們可能需要質疑:
這是投入解析器(或模型)檢查邏輯真的很有意義。我個人認爲,解決方案是一個很好的選擇。加上DataLoader的實施仍然可以快速有效。
希望這會有所幫助!