# op-authorization-server **Repository Path**: liyuncc/op-authorization-server ## Basic Information - **Project Name**: op-authorization-server - **Description**: Spring Boot 整合 Spring Authorization Server - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2023-11-29 - **Last Updated**: 2025-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一、授权方式:授权码 授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。 这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。 这样的前后端分离,可以避免令牌泄漏。 **第一步:** 获取授权码 ``` http://127.0.0.1:9000/oauth2/authorize?client_id=idForTest&client_secret=secretForTest&response_type=code&scope=message.read&redirect_url=http%3A%2F%2Fbaidu.com ``` 请求方式:GET 参数说明: | 字段名 | 字段描述 | 字段说明 | 其他 | |---------------|-------|--------------------|-----| | client_id | 客户端ID | 标识请求方,让认证服务知道是谁在请求 | 必填 | | client_secret | 客户端密钥 | 标识请求方,让认证服务知道是谁在请求 | 非必填 | | response_type | 响应类型 | 表示要求返回授权码还是其他 | 必填 | | scope | 授权范围 | 标识当前请求要求的授权范围 | 必填 | | redirect_url | 重定向地址 | 接受或拒绝请求后的跳转网址 | 必填 | **第二步:** 认证网站会要求用户登录,然后询问是否同意给予访问网站授权。用户表示同意,这时认证网站就会跳回redirect_uri参数指定的网址。 跳转时,会传回一个授权码。 ``` https://www.baidu.com/?code=KjDldBNI5b9mmizLO1fAMPrmIgfUKCcsFSFMkH4ItehYb70FxZr80aveeL98Z7-nhsXwL9cTST-7XI2ThMPqyMp04pDy6uTcaxtyKxTebYvSFABFVe4pFc3pv5jyna27 ``` **第三步:** 获取token ``` http://127.0.0.1:9000/oauth2/token?client_id=idForTest&client_secret=secretForTest&grant_type=authorization_code&code=3C2I6d3gVulYwdiGhFTXYFwT4vDx9O0zX-GSXGdTY_LqKFFXlVQVbgMuLZKLk3372SCTIWF4VWp2YE8dJuTwb_1G0qKv0Mhzqdc_iDeZEiSw9tJvlPOmm9MTvhoOru9v&redirect_uri=http%3A%2F%2Fbaidu.com ``` 请求方式:POST 参数说明: | 字段名 | 字段描述 | 字段说明 | 其他 | |---------------|-------|--------------------|----| | client_id | 客户端ID | 标识请求方,让认证服务知道是谁在请求 | 必填 | | client_secret | 客户端密钥 | 用于认证服务器验证客服端的身份 | 必填 | | grant_type | 授权方式 | 表示要求的授权方式还是其他 | 必填 | | code | 授权码 | 授权码 | 必填 | | redirect_uri | 重定向地址 | 拿到令牌后的回调地址 | 必填 | 注意: 注册客户端时,认证方法需要配置为:client_secret_post ``` clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST) ``` **第四步:** 刷新token ``` http://127.0.0.1:9000/oauth2/token?grant_type=refresh_token&client_id=idForTest&client_secret=secretForTest&refresh_token=bM-KZ7FUF17TTeJd4JVaLKh-jtFb4RImCVmLcl8SRBxV0cQAKkVzo_lPyGeMpgl-kN5H_MWfwNpNuHI_lBDUF23aCdmDdauC87HLGDsEfOi3H-y7MeuhSXTE3k5CIyb- ``` ## 二、授权方式:隐藏式 有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。 **第一步:** 获取token ``` http://127.0.0.1:9000/oauth2/authorize?client_id=idForTest&response_type=token&scope=message.read&redirect_url=http%3A%2F%2Fbaidu.com ``` 当然了,使用了implicit模式,其实就没必要使用spring security oauth2的client模块了,因为直接走浏览器模式。 ## 三、授权方式:密码模式 如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为" 密码式"(password)。 **第一步:** 获取token ``` http://127.0.0.1:9000/oauth2/token?grant_type=password&client_id=idForTest&username=anonymous&password=123456 ``` ## 四、授权方式:凭证式 最后一种方式是凭证式(client credentials),适用于没有前端的命令行应用,即在命令行下请求令牌。 **第一步:** 获取token: ``` http://127.0.0.1:9000/oauth2/token?grant_type=client_credentials&client_id=idForTest&client_secret=secretForTest ``` # Token的使用 此时,每个发到 API 的请求,都必须带有令牌。具体做法是在请求的头信息,加上一个Authorization字段,令牌就放在这个字段里面。 ``` curl -H "Authorization: Bearer ACCESS_TOKEN" "https://api.com" ```