从0开始构建一个Oauth2 Server服务 28 #
术语参考 #
角色 #
OAuth 定义了四种角色:
- 资源所有者(用户)
- 资源服务器(API)
- 授权服务器(可以是API的同一台服务器)
- 客户端(应用程序)
用户 #
OAuth 2.0 规范将用户称为“资源所有者”。资源所有者是授予访问其帐户某些部分的权限的人。这种情况下的资源可以是数据(照片、文档、联系人)、服务(发布博客条目、转移资金)或任何其他需要访问限制的资源。任何想要代表用户行事的系统都必须首先获得他们的许可。
应用程序接口 #
该规范将您通常认为的主要 API 称为“资源服务器”。资源服务器是第三方应用程序正在访问的包含用户信息的服务器。资源服务器必须能够接受和验证访问令牌,并在用户允许的情况下授予请求。资源服务器不一定需要了解应用程序。
授权服务器 #
授权服务器是用户在应用程序请求访问其帐户时与之交互的内容。这是显示 OAuth 提示的服务器,也是用户批准或拒绝应用程序请求的地方。授权服务器还负责在用户授权应用程序后授予访问令牌。
客户端 #
客户端是试图代表用户或访问用户资源的应用程序。客户端在访问用户账户之前,需要获得权限。客户端将通过将用户定向到授权服务器或通过直接向授权服务器断言权限而无需用户交互来获得权限。
机密客户 #
机密客户是有能力维护client_secret
. 通常,这些客户端只是在开发人员控制下在服务器上运行的应用程序,用户无法访问其中的源代码。这些类型的应用程序通常称为“Web 应用程序”,因为它们通常在 Web 服务器上运行。
公共客户 #
公共客户端无法维护 a 的机密性client_secret
,因此这些应用程序不使用秘密。移动应用程序和 Javascript 应用程序都被视为公共客户端。由于运行 Javascript 应用程序的任何人都可以轻松查看应用程序的源代码,因此在那里可以轻松看到秘密。对于移动应用程序,可以反编译二进制文件以提取字符串。任何时候应用程序在用户控制下的设备上运行,都应被视为公共客户端。
访问令牌 #
访问令牌是在向 API 发出经过身份验证的请求时使用的字符串。该字符串本身对使用它的应用程序没有任何意义,但表示用户已授权第三方应用程序访问其帐户。令牌具有相应的访问持续时间、范围以及服务器可能需要的其他信息。
刷新令牌 #
刷新令牌是一个字符串,用于在访问令牌过期时获取新的访问令牌。并非所有 API 都使用刷新令牌。
授权码 #
授权代码是服务器端应用程序流程中使用的中间令牌,在 服务器端应用程序中有更详细的描述。授权步骤后返回一个授权码给客户端,然后客户端用它换取访问令牌。