Go Graphql身份验证设计

afdcj2ne  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(107)

我正在使用gqlgen,gorm和chi创建一个graphql API。我已经成功地用模式和解析器创建了基本逻辑,但是在身份验证方面存在问题。
我想使用JWT来验证用户。
我知道我必须使用中间件来实现这一点,但在我看到的示例中,中间件允许访问未经身份验证的用户(允许他们访问login和createUser查询),因此它只阻止了JWT的错误。然后,他们在EACH解析器函数中对上下文(他们存储JWT的地方)执行检查,以查看用户是否经过身份验证。
我的问题是有没有比在每个解析器函数的开头调用isAuthenticated函数更好的方法?
我还考虑过创建第二个enpoint(/login),它只处理logincreateUser查询,但它有点破坏了graphql的全部意义。

polkgigr

polkgigr1#

在每个解析器函数中使用中间件和isAuthenticated方法确实是我推荐的设计。
通常,当你有一个API时,你想处理身份验证(用户是否存在)和授权(用户是否有权访问这些数据?))。授权应该在解析器级别为每个函数处理。
因此,我使用的不是isAuthenticated()方法,而是userFromContext()方法,它返回带有授权级别的用户信息。

相关问题