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

Token-based authentication: Application vs Server

刚刚发现token-based authentication的基本流程如下:

  1. 用户通过提供用户名和密码请求访问
  2. 应用程序验证凭据和returns客户端令牌
  3. 令牌随后存储在 客户端 并随每个请求一起发送
  4. 服务器然后验证令牌和returns私有数据作为响应

现在,我或多或少地了解流程,但是,我对 applicationclient服务器。我理解术语 server 是指存储 API 的位置......这也是应用程序的一部分。但是 application 也可以是各种平台上的 Web 应用程序和移动应用程序……换句话说,client

所以应用程序是否同时包含 服务器 客户端 。那么,在上述上下文中,每个术语的确切含义是什么?

再三考虑...我想原始令牌是在服务器端生成的,然后返回给客户端。这是真的吗?

这些术语在软件开发中相当多,因此如果不关注非常具体的上下文,总是很难确定确切的含义。请记住,即使是身份验证也可以被视为一个非常广泛的上下文。

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

  1. 用户通过提供一组 用户凭据请求访问 (我们不必一直使用密码,请参阅 passwordless authentication出于好奇)。
  2. 授权服务器验证用户身份,如果有效,则颁发访问令牌。
  3. 用户启动进程的客户端 应用程序接收并存储颁发的访问令牌。
  4. 客户端应用程序使用访问令牌调用资源服务器以获得用户关联的资源。

该死,现在我们有了更多的术语,但让我们尝试通过提供一些定义来解决这个问题。

首先,比较通用的:

Client: An application that obtains information from a server for local use.

Credentials: Usernames, passwords, email addresses—any of a variety of means for communicating parties to generate or obtain security tokens.

(来源:Auth0 Identity Glossary

然后在OAuth 2.0 and/or OpenID Connect的上下文中定义:

Authorization server: The server issuing access tokens to the client after successfully authenticating the resource owner and obtaining authorization.

Resource server: The server hosting the protected resources, capable of accepting and responding to protected resource requests using access tokens.

Client: An application making protected resource requests on behalf of the resource owner and with its authorization. The term "client" does not imply any particular implementation characteristics (e.g., whether the application executes on a server, a desktop, or other devices).

(来源:RFC 6749

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

  • 如您所说,客户端的范围可以从 Web、移动到事件服务器端应用程序。
  • 授权服务器和资源服务器的角色可以由同一个组件来扮演,例如,一个 Web API 具有受 HTTP 基本身份验证保护的端点,可用于交换一对username/password 具有访问令牌的凭据,然后所有剩余的 API 端点都受到保护,只有在您提供该访问令牌时才允许访问。

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