oauth2使用password模式获取access_token

本文介绍OAuth2协议中密码模式的使用方法,详细解释了如何通过用户名和密码直接获取Access Token,包括构建请求头及发送POST请求的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oauth2获取access_token的几种方式:

 

  1. 简化模式(implicit):在redirect_url中传递access_token,oauth客户端运行在浏览器中。
  2. 密码模式(password):将用户名和密码传过去,直接获取access_token。
  3. 客户端模式(client credentials):用户向客户端注册,然后客户端以自己的名义向“服务端”获取资源。
  4. 授权码模式(authorization code):通过客户端的后台服务器,向服务端认证。

这里介绍如何使用密码模式获取access_token:

 

  1. 拼接授权的client_id和client_secret,并使用base64编码之后作为请求头:
        先拼接:client_id:client_secret  如 :     client:secret
        使用任意base64工具编码: Y2xpZW50OnNlY3JldA==
        最后在请求头添加:    "Authorization" : "Basic Y2xpZW50OnNlY3JldA=="
  2.     使用post请求:
        url: http://localhost:8020/oauth/token?grant_type=password&username=admin&password=admin

     
  3. 获取结果:
            

    也可直接将client信息直接放在url中,如:
    url:http://localhost:8020/oauth/token?grant_type=password&client_id=client&client_secret=secret&username=admin&password=admin

    也可将请求数据都放在请求体或者是表单中:
### 获取 ACCESS_TOKEN 的方法 对于不同的 OAuth 2.0 授权方式,获取 `ACCESS_TOKEN` 的过程有所不同。 #### 密码模式 (Password Grant Type) 在这种模式下,客户端应用程序直接使用用户的用户名和密码来交换访问令牌。这种方式适用于高度信任的应用程序,如官方移动应用或桌面应用[^3]。 ```bash POST /token HTTP/1.1 Host: authorization-server.com Content-Type: application/x-www-form-urlencoded grant_type=password&username=johndoe&password=A3ddj3w ``` 服务器响应将包含一个 JSON 对象,其中包含了 `access_token` 和其他参数: ```json { "access_token": "2YotnFZFEjr1zCsicMWpAA", "token_type": "example", "expires_in": 3600, "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA" } ``` #### 客户端凭证模式 (Client Credentials Grant Type) 此模式用于当资源拥有者与客户端相同的情况,即客户端以其自身的身份而不是代表某个具体用户去请求受保护资源。通常应用于机器到机器通信场景中。 ```bash POST /token HTTP/1.1 Host: authorization-server.com Authorization: Basic czZCaGRSa3F0Mzo7RmpmcDBIRkVzMnljdWc= Content-Type: application/x-www-form-urlencoded grant_type=client_credentials ``` 同样地,成功的响应会返回带有 `access_token` 的 JSON 结构。 #### 隐式授权模式 (Implicit Grant Type) 隐式授予主要用于浏览器中的 JavaScript 应用或其他无法安全存储长期凭据的环境。它允许前端直接从 URL 中获得短寿命的访问令牌而无需经过中间环节。 ```html https://authorization-server.com/oauth/v2/auth? response_type=token& client_id=s6BhdRkqt3& redirect_uri=https%3A%2F%2Fclient.example.org%2Fcallback& scope=read+write&display=page&state=xyz ``` 成功后重定向至指定 URI 并附带 `#access_token=` 参数作为片段部分。 #### 授权码模式 (Authorization Code Grant Type) 这是最常用也是安全性最高的流程之一,适合于能够保密客户端秘密的应用程序。整个过程中涉及两次交互:第一次是引导用户登录并同意权限范围;第二次则是利用收到的一次性代码换取实际可用的访问令牌。 ```html GET https://authorization-server.com/oauth/v2/auth? response_type=code& client_id=s6BhdRkqt3& redirect_uri=https%3A%2F%2Fclient.example.org%2Fcallback& scope=read+write&display=page&state=abc123 ``` 一旦用户批准了该操作,将会被重定向回给定地址加上查询字符串形式的临时授权码 (`?code=value`)。随后可以发送 POST 请求以完成最终的身份验证步骤。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值