security - 单页应用程序中的安全身份验证/授权

标签 security authentication oauth authorization jwt

我正在构建以下内容:

  • 一个 JavaScript 单页应用程序;
  • 一个暴露 RESTful API 的 Node.js 后端,它将存储用户数据;

  • 用户凭据(电子邮件/密码)可以通过单页应用程序创建并存储在后端。无需与外部提供商交互,例如 Facebook Login,但将来可能有必要。

    一旦用户使用其凭据进行身份验证,单页应用程序应通过其 RESTful API 与后端交互。

    我正在努力理解如何基于凭据以既安全又与单页应用程序的约束兼容的方式设置用户身份验证和授权。

    我找到了关于的信息OAuth 2.0 JSON 网络 token .我无法想象我应该如何使用这些技术来实现我的最终目标,无论它们是应该一起工作还是独立工作,而且我正在努力意识到每种技术带来的陷阱。

    您能否提供为具有自定义后端的单页应用程序构建成功的身份验证/授权机制所需的步骤和组件的演练,如果可能,还包括以下主题:
  • 与 JWT 或其他方法相比,使用 OAuth 2.0 的优点/缺点;
  • 使用 cookie 而不是以不同的方式存储 token (例如 LocalStorage)和安全隐患;
  • 最佳答案

    您可以在没有 Oauth2 的情况下使用 JWT 和没有 JWT 的 Oauth2 或将它们一起使用。

    请记住,OAuth2 管理授权而不是身份验证。
    OAuth2 不介意如何验证您的用户。处理认证,你可以看看OpenId Connect ,Oauth2 之上的一层。 OpenId Connect 将向您的应用程序发送一个签名的 id_token,其中包含有关用户身份的信息。

    使用 OpenId Connect 对用户进行身份验证后,您可以联系 OAuth 服务器以获取 access_token(是否为 JWT)。此 token 将用于联系您的 API。对于 SPA 应用程序 Implicit Grant flow被推荐。

    对于 JWT,它用于 id_token(来自 OpenId Connect)并且可用于 access_token (OAuth2)。对于 access_token,您的 token 可以通过引用(推荐用于 SPA)或通过值。

    通过引用,您的 token 对客户端是不透明的(例如 guid)。根据值,您的 token 是可解析的,并且客户端可以读取包含的数据。

    对于组件的使用,我个人使用 Keycloak来自红帽。

    希望能帮助到你。

    关于security - 单页应用程序中的安全身份验证/授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39058216/

    相关文章:

    c# - 验证本地用户脱离网络

    c++ - 如何在数据库中以加密形式保存字符串(用户名密码),并在用户登录时解密

    ruby-on-rails - Omniauth:回调未触发,返回 "invalid credentials"失败

    安卓 : Handle OAuth callback using intent-filter

    authentication - 在 OAuth 2.0 中的 2-legged Authentication 中 client_id 和 client_secret 的用途是什么

    c - 依赖 PATH_MAX 会导致溢出

    javascript - 允许用户上传 HTML/JS 文件的风险

    node.js - 确保应用程序安全的 Node js 技术或步骤

    authentication - 无法登录admob帐户

    oauth - Google OAuth 检查用户是否从 Google 注销