oauth2授权码模式下为什么要code换取token

在oauth2的授权码模式中,资源服务器需要拿code换取token,那么为什么Oauth2要设计这种模式呢?

我觉得是因为:

1.资源服务器不需要知道用户的账号密码

2.保证资源服务器是合法的索取token对象

我的理解:

比如用户在qq已经注册,没有在网易注册,但是想直接用qq账号在网易登录,怎么办?我猜是这样的:

1.网易曾经在qq注册过,拥有qq颁发的id和secret、以及跳转到网易的地址redirect_uri

2.网易在登录页弄上个qq图像供用户点击,打开qq登录窗口,qq登录成功后,返回code给网易,打开网易在qq注册的回调地址redirect_uri,网易拿到合法code,有效期可能是几分钟

3.网易后台服务器拿code,id,secrect,redirect_uri去换token,并保存token,

4.网易拿token去qq换取用户信息,并颁发网易的登录令牌,前端页面提示用户登录成功

如果没有code会怎样?

当用户从网易跳转到qq登录页,账号密码验证通过后,需要从qq回跳到网易,在没有code情况下,qq只能通过前端url或者header里将access_token传递给网易,显然这样是不安全的。

结论

code解决了资源服务器合法性验证,以及在资源服务器没有用户账号密码情况下的用户合法性验证二个问题。头大好几圈,我感觉自己在胡扯八道,希望有大神指点一二,感激不尽!

猜你喜欢

转载自blog.csdn.net/miaowansheng/article/details/129688056