【问题标题】:Elixir Phoenix Absinthe GraphQL API authentication in both web and mobile app'sElixir Phoenix Absinthe Web 和移动应用程序中的 GraphQL API 身份验证
【发布时间】:2021-12-05 05:36:13
【问题描述】:

我正在为我的应用开发 Absinthe GraphQL API。我还在学习这个过程(所以请放轻松)。

我有一个 Absinthe/GraphQL MyAppWeb.schema.ex 文件,用于查询和突变。我的问题是如何使用此 API 在移动和 Web 应用上对用户进行身份验证?

如何在我的网络应用程序中设置 cookie(httpOnly 和安全)并在单个苦艾酒 API 中访问/刷新令牌以服务于我的网站和移动应用程序。基本上我想学习的是如何基于特定平台对用户进行身份验证。

如果我的问题听起来有点令人困惑,我很乐意提供与我的问题相关的更多信息。如果有人能解释一下程序,我将不胜感激,我一直在坚持这一点。

【问题讨论】:

    标签: graphql elixir phoenix-framework absinthe


    【解决方案1】:

    我会避免使用苦艾酒提供的身份验证机制(如果有的话)。根据您使用的前端,我会使用 JSON API 身份验证。服务器上的流程如下:

    1. 为登录创建一个端点,该端点将接收用户和密码并返回一个刷新令牌。
    2. 创建一个端点来交换访问令牌的刷新令牌。
    3. 使用像 guardian 这样的库来生成刷新/访问令牌。
    4. 创建一个 phoenix plug 进行身份验证以检查您的令牌,监护人为此提供了一些内置插件。

    现在你必须在设备上实现:

    1. 能够在设备上保存刷新和访问令牌。
    2. 拥有一个用于在授权请求上注入访问令牌的全局处理程序。
    3. 当访问令牌过期时,有一个全局处理程序。 (您通常检查您的请求是否返回 Unauthorized,然后您应该使用您的刷新令牌从服务器请求一个新的访问令牌)

    这似乎是一个粗略的实现,但我建议在实现您的系统时不要使用您不知道它在后台是如何工作的黑盒库。

    【讨论】:

    • 谢谢伙计。我真的很感激帮助。这适用于移动设备(比如我使用的是 react-native,我可以将令牌存储在 AsyncStorage 中)。至于网站,我应该在哪里存储令牌?(我在某处读到本地存储易受 XSS 攻击)。因此将令牌存储在 httpOnly cookie 中是一种选择,但 javascript 无法访问此类 cookie 来设置 Authorization 标头..
    • xss 保护应该在输入级别处理,而不是在存储级别。如果您使用的是框架,则已经实现了输入卫生,因此您可以安全地将其放入本地存储中。
    猜你喜欢
    • 1970-01-01
    • 2014-02-25
    • 2021-12-26
    • 1970-01-01
    • 2014-07-10
    • 2012-11-01
    • 2017-05-09
    • 2014-03-02
    • 2017-02-05
    相关资源
    最近更新 更多