🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 第一步:引导用户到认证服务器(授权登录) 在登录界面,引导用户选择商城第三方授权登录,用户点击后跳转到商城授权页面。授权页面地址获取方法如下: #### url地址 >**{host}/oauth2/authorize?response_type=code&client_id=YOUR_API_ID&redirect_uri=REDIRECT_URL&state=NONCESTR** #### url参数 * `response_type`:表示响应类型,必选项,此处的值固定为code * `client_id`:表示客户端的ID,即签约成功后获得的API Key,用来标志授权请求的来源,必选项 * `redirect_uri`:授权后重定向的回调链接地址,请使用urlencode对链接进行处理 * `state`:表示客户端的当前状态,认证服务器会原封不动地返回这个值 ,用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验。 #### 例子 [https://api_test.employeechoice.cn/v1/oauth2/authorize?response_type=code&client_id=100001&redirect_uri=https%3a%2f%2fwww.baidu.com%2f&state=bb38108d1aaf567c72da0f1167e87142d0e20cb2bb24ec5a](https://api_test.employeechoice.cn/v1/oauth2/authorize?response_type=code&client_id=100001&redirect_uri=https%3a%2f%2fwww.baidu.com%2f&state=bb38108d1aaf567c72da0f1167e87142d0e20cb2bb24ec5a) <br> ## 第二步:用户同意为第三方应用授权(获取Authorization Code) 这一步,对于用户来说,同意授权即可。对于开发者来说,就是获取code。用户授权并登录后,授权服务器首先会post一个请求回服务器进行用户认证,认证通过后授权服务器会生成一个授权码,然后认证服务器会回调redirect_uri,并返回授权码code和授权请求中传递的state #### 回调实例 [http://www.baidu.com?code=093B9307E38DC5A2C3AD147B150F2AB3&state=bb38108d1aaf567c72da0f1167e87142d0e20cb2bb24ec5a](http://www.baidu.com?code=093B9307E38DC5A2C3AD147B150F2AB3&state=bb38108d1aaf567c72da0f1167e87142d0e20cb2bb24ec5a) 注意:`093B9307E38DC5A2C3AD147B150F2AB3` 就是返回的授权码。请务必快速执行此操作,因为授权代码会在30秒后到期,且只能使用一次! <br> <br> ## 第三步: 使用授权码向认证服务器申请令牌(获取access_token) 开发者拿到认证服务器返回的授权码(Authorization Code)后,需要根据授权码再次向认证服务器申请令牌(access_token) ~~~[api] post:https://api_test.employeechoice.cn/v1/oauth2/accessToken *string:client_id=#表示客户端的ID,即签约成功后获得的API Key,用来标志授权请求的来源 *string:client_secret#认证密钥,签约成功后获取的API Secret,机密信息十分重要 *string:redirect_uri#授权时传的回调地址,必须和第一步保持一致,主要验证来源 *string:grant_type=authorization_code#授权类型,此处的值固定为authorization_code *string:code#授权码 <<< success { "access_token": "fe7c425d163ba7739a710b1fe0f63184bc8cf703", "expires_in": 3600, "token_type": "Bearer", "scope": null, "refresh_token": "c4ead4fb10f663d7df0087a36b892b9576fd3daf"// 刷新用的token } <<< error { "error": "invalid_grant", // 错误代码 "error_description": "Authorization code doesn't exist or is invalid for the client" // 错误信息 } ~~~ <br> <br> ## 第四步:向资源服务器申请资源(获取开放数据) 到这一步OAuth2.0的流程可以说是结束了,但是对于开发者来说还有重要的事情要做。那就是: **拿到token、openid和用户信息这么重要数据保到自己数据库,实现自己的业务逻辑** 有了token,再向资源服务器提供的资源接口发送请求,资源服务器校验令牌无误后,就会返回开放接口数据。 #### 1. 获取平台openid ~~~[api] get:https://api_test.employeechoice.cn/v1/oauth2/getOpenId?access_token=fe7c425d163ba7739a710b1fe0f63184bc8cf703 *string:access_token#令牌 <<< success { "status": 1, "msg": "操作成功!", "result": { "access_token": "eef4b2de110b205a85ba7ef3d941f2eeef0aea58", "client_id": "100001", "expires": 1536083506, "scope": null, "open_id": "619ebba6722756fdcb2654068df5ee4c" } } <<< error { "error": "invalid_token", "error_description": "The access token provided is invalid" } ~~~ #### 2. 获取用户信息 ~~~[api] get:https://api_test.employeechoice.cn/v1/oauth2/getUserInfo?access_token=fe7c425d163ba7739a710b1fe0f63184bc8cf703 *string:access_token#令牌 <<< success { "status": 1, "msg": "操作成功!", "result": { "seller_name": "倍升互联(北京)科技有限公司", } } <<< error { "error": "invalid_token", "error_description": "The access token provided is invalid" } ~~~ <br> ## 第五步:令牌延期(刷新) 为了安全性考虑,返回的`access_token`是有时间限制的,上面返回的令牌有效期为10小时,access_token失效时,需要重新向认证平台申请授权。 #### 用例 * 允许客户长时间访问用户的资源 * 检索具有相同或较小范围的其他标记以进行单独的资源调用 ~~~[api] post:https://api_test.employeechoice.cn/v1/oauth2/refreshToken *string:client_id#表示客户端的ID,即签约成功后获得的API Key,用来标志授权请求的来源 *string:client_secret#认证密钥,签约成功后获取的API Secret,机密信息十分重要 *string:grant_type=refresh_token#授权类型,refresh_token *string:refresh_token#刷新令牌 <<< success { "access_token": "fe7c425d163ba7739a710b1fe0f63184bc8cf703", "expires_in": 3600, "token_type": "Bearer", "scope": null, "refresh_token": "c4ead4fb10f663d7df0087a36b892b9576fd3daf"// 刷新用的token } <<< error { "error": "invalid_grant", // 错误代码 "error_description": "Authorization code doesn't exist or is invalid for the client" // 错误信息 } ~~~