理解OAuth 2.0 - 阮一峰的网络日志 (ruanyifeng.com)
角色
第三方应用程序:“客户端”
客户端是尝试访问用户帐户的应用程序。它需要先获得用户的许可,然后才能执行此操作。
API:“资源服务器”
资源服务器是用于访问用户信息的 API 服务器。
授权服务器
这是提供用户批准或拒绝请求的接口的服务器。在较小的实现中,这可能与 API 服务器是同一台服务器,但更大规模的部署通常会将其构建为单独的组件。
用户:“资源所有者”
资源所有者是授予访问其帐户某些部分的权限的人员。
授权
OAuth 2 的第一步是从用户那里获得授权。对于基于浏览器或移动的应用程序,这通常是通过向用户显示服务提供的界面来实现的。
OAuth 2 为不同的用例提供了几种“授权类型”。定义的授权类型包括:
- 在 Web 服务器、基于浏览器的应用程序和移动应用程序上运行的应用程序的授权代码
- 使用用户名和密码登录的密码(仅适用于第一方应用)
- 在没有用户在场的情况下进行应用程序访问的客户端凭据
- 隐式以前被推荐给没有秘密的客户端,但已被使用授权代码授予与PKCE取代。
下面将详细介绍每个用例。
Web 服务器应用程序
Web 服务器应用程序是您在处理 OAuth 服务器时遇到的最常见的应用程序类型。Web 应用程序是用服务器端语言编写的,并在应用程序源代码不向公众开放的服务器上运行。这意味着应用程序在与授权服务器通信时能够使用其客户端密钥,这有助于避免许多攻击媒介。
授权
创建一个“登录”链接,将用户发送到:
1 | https://authorization-server.com/auth?response_type=code& |
- response_type=code - 指示您的服务器希望收到授权代码
- client_id - 首次创建应用程序时收到的客户端 ID
- redirect_uri - 指示授权完成后要将用户返回到的 URI
- scope - 一个或多个范围值,指示您希望访问用户帐户的哪些部分
- state - 应用程序生成的随机字符串,稍后将对其进行验证