基于令牌的身份验证:应用程序与服务器

时间:2016-09-08 12:48:18

标签: authentication client-server json-web-token

刚刚发现基于令牌的身份验证的基本工作流程如下:

  1. 用户通过提供用户名和密码来请求访问
  2. 应用程序验证凭据并将令牌返回给客户端
  3. 然后,令牌存储在客户端上,并随后发送每个请求
  4. 然后服务器验证令牌并将私人数据作为回复
  5. 返回

    现在,我或多或少了解流量,但是,我遇到的问题是应用客户端服务器。我理解术语服务器表示存储API的位置...这也是应用程序的一部分。但应用程序也可以是从各种平台上的网络应用程序到移动应用程序......换言之,客户端

    因此,应用程序同时包含服务器客户端是不正确的。那么在上述背景下,每个术语的含义是什么呢?

    第二个想法......我想原始令牌是在服务器端生成的,然后将其返回给客户端。这是真的吗?

1 个答案:

答案 0 :(得分:1)

这些术语在软件开发中非常重要,因此如果不专注于非常具体的上下文,就很难确定其确切含义。请记住,即使身份验证也可以被视为一个非常广泛的背景。

我会将您建议的工作流程改写为以下内容:

  1. 用户通过提供一组用户凭据 来请求访问权限(我们不必一直使用密码,出于好奇请参阅passwordless authentication)。< /子>
  2. 授权服务器验证用户身份,如果有效,则会发出访问令牌。
  3. 用户启动进程的客户端应用程序接收并存储已发布的访问令牌。
  4. 客户端应用程序使用访问令牌调用资源服务器,以获取用户相关资源。
  5. 该死的,现在我们有更多的条款,但让我们试着通过提供一些定义来解决这个问题。

    首先,更通用的那些:

      

    客户端:从服务器获取供本地使用的信息的应用程序。

         

    凭据:用户名,密码,电子邮件地址 - 用于通信方生成或获取安全令牌的各种方法。

    (来源:Auth0 Identity Glossary

    然后在OAuth 2.0和/或OpenID Connect

    的上下文中定义
      

    授权服务器:服务器在成功验证资源所有者并获得授权后向客户端发出访问令牌。

         

    资源服务器:托管受保护资源的服务器,能够使用访问令牌接受和响应受保护资源请求。

         

    客户端:代表资源所有者及其授权进行受保护资源请求的应用程序。术语&#34;客户&#34;并不暗示任何特定的实现特征(例如,应用程序是在服务器,桌面还是其他设备上执行)。

    (来源:RFC 6749

    尝试定义应用程序甚至没用,但我们应该从其他定义中得出以下结论:

    • 正如您所说,客户可以是从Web,移动到事件服务器端应用程序。
    • 授权服务器和资源服务器的角色可以由同一个组件播放,例如,具有受HTTP基本身份验证保护的端点的Web API,可用于将一对用户名/密码凭证与访问令牌,然后所有剩余的API端点都受到保护,只有在您提供访问令牌时才允许访问。

    最后,最后一个说明澄清你的上一个问题,是的,访问令牌的创建需要在服务器端进行,因为令牌的创建将伴随某种机制,以确保令牌不能被篡改,实际上是由一个非常有名的实体创建的。对于JWT's的情况,这种机制包括签署令牌,这是通过让服务器知道其他人不知道的秘密来完成的。