我正在使用Elixir的Phoenix框架构建一个REST API。在API中,我需要通过电话号码对用户进行身份验证,即通过发送SMS OTP代码。在对用户进行身份验证后,身份验证服务器将访问令牌和刷新令牌发送到客户端。客户端(移动应用程序)在本地存储这些令牌,并在每个请求中将访问令牌作为Authorization: Bearer <Access_Token>
发送到资源服务器。我的实际问题是,资源服务器如何验证从移动应用程序/客户端接收的访问令牌?
资源服务器是否需要联系Auth服务器来验证访问令牌?这会带来很多开销。请帮助我理解RestFull接口身份验证。
感谢您抽出时间阅读我的问题。
发布于 2020-12-29 14:44:37
资源服务器如何验证从移动应用程序/客户端接收的访问令牌?
与夜总会保镖验证您的驾照作为年龄证明让您进入的方式相同:通过验证权威和签名,但它不需要打电话给您的DMV来验证您的驾照是真实的,因为它信任签名(在本例中,是加密签名)。
也就是说,一些系统确实使用了短的(例如32字节)无意义的随机数据的“参考令牌”,其被用作由授权服务器持有的某些用户许可记录的不可预测的记录标识符。资源服务器最初需要联系身份验证服务器,但随后它可以简单地将身份验证结果本身缓存一段时间窗口。
发布于 2020-12-30 02:39:12
听起来你已经准备好验证令牌了。您将需要签署令牌的服务器的公钥。这取决于你所使用的认证服务器,以及你如何获得它。在某些情况下,您可以在后端预加载此密钥作为配置设置。否则,您可能会通过向身份验证服务器发出https请求来获取它。如今,大多数身份验证服务器都希望提供一个JWKS api,您可以使用它来获取所需的密钥。然后,使用令牌和公钥,您可以使用elixir jwt库来验证您拥有的令牌是否由您信任的服务器签名,这意味着SMS代码已经过验证,您可以继续在后端处理请求所需的任何操作。
如果您正在使用Joken作为灵丹妙药,您可以查看https://hexdocs.pm/joken_jwks/introduction.html和https://hexdocs.pm/joken/introduction.html以获取更多信息。
https://stackoverflow.com/questions/65488254
复制相似问题