第二节:
第一步:用户在第三方网站中点击受权链接 >>>>>>>>>>> 第二步:链接引导至EVE的官网登录界面
受权链接格式以下:
https://login.eveonline.com/oauth/authorize?response_type={response type}&redirect_uri={redirect uri}&client_id={client id}&scope={scopes}&state={state}
其中{ }内的容为参数值
名词解释:
{response type} :参数值为"code";
{redirect uri} :此参数为回调网址(callback地址,这个网址是第三方在CCP开发平台的Applications注册中”Callback URL“的值)
{client id} :此参数为第三方的账号ID(这个账号ID是第三方在CCP开发平台的Applications注册中”Client Id“的值要一样)
{scopes} :此参数为第三方的申请的业务范围(这个账号ID是第三方在CCP开发平台的Applications注册中”Scopes“的对应)
{state} :此参数为状态码。此参数将由第三方自行编写,CCP在回调的时候会以原样返回;(此参数为选用参数)
第三步:客户登录账号并完成授权 >>>>>>>>>>>>>> 第四步:EVE官网反向访问第三方回调网址(Callback)
回调网址格式以下:
{redirect uri}?code=ckEZIa6JUOdoN6ijmqBI...qgpU-SmPsZ0
如:回调网址信息为:
https://www.test.com/callback那他的回调网址结果就是:
https://www.test.com/callback?code=ckEZIa6JUOdoN6ijmqBI...qgpU-SmPsZ0其中{ }内的容为参数值
名词解释:
{redirect uri} :此参数为回调网址(callback地址,这个网址是第三方在CCP开发平台的Applications注册中”Callback URL“的值)
{code} :此参数为EVE官网同意第三方和用户的授权码
(PS:关于如何截取这个回调的CODE的问题。思路是,把自己的网站当成一个服务器,EVE的登录网页向我们的服务器发了一个GET申请)
第五步:拿到授权码后向EVE发出申请Token请求:
https://login.eveonline.com/oauth/token大家会发现这个网址没有参数了,那是因为这个要用POST来发送请求:
POST参数内容为:
header部分:
{
"Content-Type":"application/json",
"Authorization" : 'Basic '+ base64encoded({client id}:{client_secret})
}
body部分:
{
"grant_type":"authorization_code",
"code":"{the authorization code}"
}
其中{ }内的容为参数值
名词解释:
{client id} :此参数为第三方的账号ID(这个账号ID是第三方在CCP开发平台的Applications注册中”Client Id“的值要一样)
{client_secret} :此参数为第三方的账号密码(这个账号ID是第三方在CCP开发平台的Applications注册中”Client Secret“的值要一样)
{the authorization code} :此参数为第四步中回调网址提供的{code}值
(PS:在header部分中,大家会发现在一个叫base64encoded()的函数,这个加密函数网上有不少提供的,大家可以自行去收集;而加密部份大家要注意的是[ {client id}:{client_secret} ],比如{client id}的值是123456,{client_secret}的值是789012,那加密部分为[ 123456:789012 ],注意”冒号“的存在,另一个要注意的是"Basic "这个关键字后的“空格”不能去除)
base64encoded()函数的在线应用
https://www.base64decode.org/那我们接收到的结果(response)应该如下:
{
"access_token":"jZOzkRtA8B...LQJg2",
"token_type":"Bearer",
"expires_in":1199,
"refresh_token":"RGuc...w1"
}
此时第三方已经拿到用户的协议钥匙(refresh_token),也拿到访问钥题(access_token)也拿到了,理论上是不是流程就结束了,大家有没发现,第三方好像都没拿到用户的ID,光用协议钥匙(refresh_token),无用户ID,那信息储存会有很大问题的。所以还有第六步。
第六步:获取用户基本信息:
https://login.eveonline.com/oauth/verify它与第五步的访问一样,都是以GET方法发送请求,但这次只需加header部分就好了
header部分:
{
"Authorization": "Bearer " + {access_token}
}
其中{ }内的容为参数值
名词解释:
{access_token} :此参数为第五步中接收到的结果(Response)的”access_token“参数
我们接收到的结果(response)应该如下:
{
"CharacterID":95465499,
"CharacterName":"CCP Bartender",
"ExpiresOn":"2017-07-05T14:34:16.5857101",
"Scopes":"esi-characters.read_standings.v1",
"TokenType":"Character",
"CharacterOwnerHash":"lots_of_letters_and_numbers",
"IntellectualProperty":"EVE"
}
第三方就拿到了用户的ID(CharacterID)和用户的名称(CharacterName)了。到此EVE的SSO的流程全部结束。
附加情况,那第三方截取了Refresh_token后,以后怎么换access_token呢,因为只有1200秒的限时;那就要重复第五步,header的部分不变,将Body部分更换为以下:
body部分:
{
"grant_type":"refresh_token",
"refresh_token":"{the refresh token}"
}
就可以得到新的access_token了。
关于本贴中涉及到的欧米伽账号问题,解释是这样的,如果小伙伴想自己开发第三方工具,那就要在EVE官网中申请一个程序接口”Applications“,而这个申请权限只限于欧米伽账号,阿尔法账号是申请不了的。。所以。。。。尴尬。。。
EVE开发者平台
https://developers.eveonline.com/