Logo
Section 1 / 3

密码授权

在本课程中,你将了解各种类型的资助,并深入理解密码授权。

导入

密码授权

在本课程中,你将了解各种类型的资助,并深入理解密码授权。

不同类型的授权方式

授权许可(Authorization Grant)是指 OAuth2 客户端通过 OAuth2 协议获取对受保护资源的访问权限。

常见的授权类型包括:

  • 授权码(Authorization Code)
  • 隐式授权(Implicit)
  • 密码模式(Password)
  • 客户端凭证(Client Credentials)
  • 设备码(Device Code)
  • 刷新令牌(Refresh Token)

其中最常用的三种是 密码模式、授权码模式 和 刷新令牌模式。

密码模式

使用“密码模式”进行授权时,用户需通过 用户名 和 密码 验证身份。若提供的信息正确,服务器将返回一个 JSON Web Token(JWT)。该令牌包含一些默认字段,同时你也可以自由添加自定义信息。

注意:首次返回 JWT 以及传递令牌载体的方式已预先设定,这能帮你减少部分架构决策的工作量。

下图展示了使用密码模式时的通信流程。

...
Password grant sequence diagram

密码模式包含两个步骤:

  • 客户端向用户请求授权凭证(用户名和密码),并通过 POST 请求发送以下参数至授权服务器:
1{ 2 "grant_type": "password", 3 "client_id": "some fancy client id", 4 "client_secret": "somefancysecret", 5 "scope": "email post upgrade somefancyotherscope", 6 "username": "username", 7 "password": "password" 8}
  • 授权服务器返回一个包含以下属性的 JSON 对象:
1{ 2 "token_type": "Bearer", 3 "expires_in": 3600, 4 "access_token": "somefancyaccesstoken", 5 "refresh_token": "somefancyrefreshtoken" 6}

expires_in 是一个整数,表示访问令牌的有效期(单位为秒)。

本课程采用 Spring Security 实现,因其经过充分测试、公开可用且表现可靠。另一种方法是使用 AspectJ 并创建 JWT 过滤器,但这种方法需要编写单元测试,增加了复杂性。不过,如果项目中有经验丰富的开发人员,他们可能已经熟悉 Spring Security。

简介

授权码