密码模式不同于前面讲过的 授权码 和 简化模式;
前面的这两种模式中账号密码都是在授权服务器上输入的;
都有重定向跳转步骤;
客户端 Clinet 并不知道用户账号和密码;
而密码模式则需要 Clinet 使用账号密码来获取 Token ;
虽然 OAuth 协议要求 Clinet 禁止存储用户的账号密码;
但是大家并不能信任第三方的 Client;
因此密码模式一般用于自家 Client ;
比如说自家的 APP ;
而不会开放给第三方 Client 使用;
下面的演示跟上篇文章一样;
使用本地创建的 OAuth 项目做示例;
项目链接是 http://oauth.test
直接获取 Token ;
请求方式: POST
链接:http:// oauth.test/oauth/token
请求参数如下:
grant_type: password
username: xxx
password: xxx
scope: user:email
grant_type
: 固定值为 password username
: 用户名password
: 密码scope
: 要申请的权限
请求的返回值如下:
{
"token_type": "Bearer",
"expires_in": xxx,
"access_token": "xxx",
"refresh_token": "xxx",
}
请求的返回值如下: token_type
是 token 类型一般是 Bearer ; expires_in
过期时间 access_token
用于访问资源的令牌 refresh_token
用于刷新 access_token
当 access_token 过期后我们可以使用 refresh_token 获取新的 access_token ;
刷新 access_token 的方式如下:
请求类型: POST
请求链接: http://oauth.test/oauth/token ;
请求参数如下:
grant_type: refresh_token
refresh_token: xxx
scope: user:email
刷新 token 的返回值跟获取 token 步骤中的返回值一样;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
最新评论