Oauth 客户端、服务器、数据库和Auth0的一次性密码身份验证流

Oauth 客户端、服务器、数据库和Auth0的一次性密码身份验证流,oauth,openid-connect,one-time-password,Oauth,Openid Connect,One Time Password,我正在尝试通过使用Auth0的SMS实现OTP身份验证流(使用Twillio的SMS无密码连接) 我们有一个移动应用程序,一个API,一个数据库,我们使用Auth0 步骤: 用户输入一个电话号码 客户端是否直接将电话号码发送给Auth0 或者客户端是否将电话号码发送到调用Auth0(Twillio)的API 用户通过SMS接收代码 客户端是否将代码发送给Auth0 或者客户端是否将代码发送给API,然后API将代码发送给Auth0 用户输入代码并接收访问令牌、id令牌和刷新令牌 Aut

我正在尝试通过使用Auth0的SMS实现OTP身份验证流(使用Twillio的SMS无密码连接)

我们有一个移动应用程序,一个API,一个数据库,我们使用Auth0

步骤:

  • 用户输入一个电话号码
    • 客户端是否直接将电话号码发送给Auth0
    • 或者客户端是否将电话号码发送到调用Auth0(Twillio)的API
  • 用户通过SMS接收代码
    • 客户端是否将代码发送给Auth0
    • 或者客户端是否将代码发送给API,然后API将代码发送给Auth0
  • 用户输入代码并接收访问令牌、id令牌和刷新令牌
    • Auth0是否分别直接与API和客户端通信
    • 客户端是否应该接收这些令牌并将其发送到后端
    • 或者API是否应该直接接收这些信息并仅向客户端发送id_令牌
  • 用户访问数据库中的资源
    • id_tokem、access_令牌和refresh_令牌是否需要保存在数据库中

    这些是我的几个问题,但我对OTP的一般身份验证流程更为困惑。

    Auth0帮助您处理身份验证过程,您的API需要确定用户可以和不能通过每个请求访问哪些内容。此过程称为授权。换句话说,身份验证从客户端开始,而授权从服务器端开始

    身份验证(客户端)

    在您的示例中,客户端直接将电话号码发送给Auth0,Auth0(幕后的Twillio)发回代码

    客户端将凭据(电话号码和代码)发送回验证凭据的Auth0。代码成功后,Auth0将访问信息封装在称为访问令牌(JWT-JSON Web令牌)的东西中。将身份信息封装在称为ID令牌的东西中。有关令牌的更多信息,请参见此处

    移动应用程序在本地存储访问令牌和刷新令牌

    授权(后端)

    当用户需要向受保护的API端点发出请求时,客户端应用程序必须发送访问令牌和API请求,然后执行授权过程。access_令牌必须位于它向受保护端点发出的每个请求的授权头中

    服务器验证访问令牌。如果访问令牌无效,请使用刷新令牌获取其他访问令牌。如果有效,服务器将确定令牌承载器是否可以使用令牌中的信息访问请求的端点

    您的服务器(问题中的第3点)只需要几件事情就可以启动授权过程。您必须使用JWT策略验证访问令牌。如果您使用的是nodejs,那么有一个名为Passport的好模块可以帮助您实现这一点

    要配置JWT策略,您需要来自Auth0的两个值:一个Auth0颁发者URL和一个AuthO受众。您将通过在Auth0仪表板中创建api获得这些值

    这意味着Passport验证全部由Auth0在Auth0仪表板中创建的租户(api)中的Auth0处理。Auth0确定登录用户的身份,然后在有效负载对象中传递有关用户的数据,您可以通过控制器和中间件在整个请求-响应周期中访问这些数据

    受保护的端点(例如
    /account
    会自动调用JwtStrategy配置逻辑,并在access\u令牌无效时阻止请求

    这篇文章帮助我理解了OAuth流,我在这里引用了很多:)