繁体   English   中英

Angular 2 + Rails + Auth0

[英]Angular 2 + Rails + Auth0

我试图弄清楚如何在Angular / Rails应用程序中使用Auth0。

我已经使用仅Angular的应用程序设置了Auth0,并且工作正常。 我可以看到RailsAuth0文档,据我所知。

我不了解如何将前端身份验证与Rails连接起来,因为在任何地方都找不到有关此文档的文档。

好的,我知道了。 如果我使用Auth0在Angular端进行身份验证,然后向我的Rails服务器发出HTTP请求,则该HTTP请求将具有一个Authorization标头,其值如下所示:

承载eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JlbmZyYW5rbGlubGFicy5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NTgzMDZmOTFjMDg4MTRlMDEwMTVmNDM0IiwiYXVkIjoiajNKdHpjYnNpTUkyR0JkRnZGb3FFTjM4cUtTVmI2Q0UiLCJleHAiOjE0Nzk4OTc3OTYsImlhdCI6MTQ3OTg2MTc5Nn0.2cGLY_e7jY0WL-ue4NeT39W4pdxJVSeOT5ZGd_xNmJk

“ Bearer”之后的部分(以“ eyJ0”开头)是JSON Web令牌 从今以后,我将把JSON Web令牌简称为“令牌”。

当Rails收到HTTP请求时,它可以获取并解码令牌。 就我而言,我正在使用Knock

Knock希望我的User模型定义from_token_payload方法。 这是我的样子:

class User < ApplicationRecord
  def self.from_token_payload(payload)
    User.find_by(auth0_id_string: payload['sub'])
  end
end

我的user表具有auth0_id_string列。 如果我手动创建一个auth0_id_string与我在解码的Auth0令牌中的sub下找到的用户匹配的用户,则我的from_token_payload方法将找到该用户,并且Knock会为我对该令牌表示赞许。 如果找不到用户,请竖起大拇指。

因此大致如下:

  1. Angular要求Auth0认证用户
  2. Auth0发回JSON Web令牌
  3. Angular将JSON Web令牌发送到Rails
  4. Rails对该令牌进行解码
  5. Rails试图找到与该令牌中的数据匹配的用户
  6. Rails发送200或401,具体取决于是否找到了匹配的用户

有一些遗漏的地方,但这就是要点。 我可能最终会写一篇有关Angular + Rails + Auth0身份验证的教程,因为据我所知,目前还不存在。

根据您提供的信息,我假设您想要一个具有在Angular中实现的前端并使用基于Rails的API来为Angular前端提供所需服务的应用程序。

在这种情况下,您可以从Auth0端将此模型建模为单个(客户端)应用程序,并执行以下操作之一:

  1. 将身份验证产生的ID令牌用于两个目的:
    • 向Angular应用程序提供有关当前经过身份验证的用户的信息,以便它可以满足任何适用的用户界面要求
    • 作为一种对Angular应用程序对Rails API进行的调用进行身份验证的方法,也就是说,Rails API使用基于令牌的身份验证系统,该系统接受Auth0发出的ID令牌。
  2. 在Rails API上公开一个终结点,Angular可以使用该终结点来交换用户身份验证时通过任何其他凭据获得的ID令牌,这些凭据随后可以用于访问该API。

第一个选项最容易实现,但是您必须在每个请求中都包含ID令牌。 第二个方面增加了您的复杂性,但可能会给您带来更大的灵活性。

如果这不能解决您的所有问题,能否请您提供有关您要完成的确切方案的更多详细信息,以更新问题。


最后要注意的是,如果您打算提供一个API,以后可以供不同范围的应用程序使用,则最安全的方法是使用基于令牌的系统,其中令牌将由授权服务器发行符合OAuth2。

拥有自己的OAuth2授权服务器很难维护,因此Auth0正在启用它作为一项附加服务,该服务已经可以在预览模式下用于美国地区的帐户。 基本上,这将允许作为身份验证过程的一部分,获取客户端应用程序用来了解当前已验证用户的ID令牌以及允许对指定API进行调用的访问令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM