有篇博客是这样写的OAuth2.0授权码模式的流程:
授权码模式(authorization code)授权的流程:采用Authorization Code获取Access Token的授权验证流程又被称为Web Server Flow,适用于所有有Server端的应用,如Web/Wap站点、有Server端的手机/桌面客户端应用等。一般来说总体流程包含以下几个步骤:
1、通过client_id请求授权服务端,获取Authorization Code。
2、通过Authorization Code、client_id、client_secret请求授权服务端,在验证完Authorization Code是否失效以及接入的客户端信息是否有效(通过传递的client_id和client_secret信息和服务端已经保存的客户端信息进行匹配)之后,授权服务端生成Access Token和Refresh Token并返回给客户端。
3、客户端通过得到的Access Token请求资源服务应用,获取需要的且在申请的Access Token权限范围内的资源信息。
问题:
建立一个场景来说问题可能清晰一点:
场景:比如在抖音上第一次使用微信登录,用户的操作是:在抖音里面点击微信图标后,会跳转到一个有登录按钮的页面,点击登录按钮一个动作即可完成登录,对照上面的博客写的三个步骤,问题如下:
问题1:第1步说,“通过client_id请求授权服务端”,cilent_id是什么时候生成的?
问题2:第2步说,“授权服务端生成Access Token和Refresh Token并返回给客户端”,这里的“返回给客户端”是返回给抖音服务器还是抖音手机app?
问题3:授权过程一共有三个角色,如下图所示:
当用户在抖音的微信登录界面按下登录按钮后,抖音app是直接发送请求到微信服务器完成授权,还是抖音app发送请求到抖音服务器,然后由抖音服务器向微信服务器发送请求完成授权?
请大佬帮捋一捋这个流程,有点乱,谢谢。
问题1:
抖音里面用户可以通过微信登录的前提是抖音先向微信申请一下权限。就是说抖音向微信请求说“允许你的用户登录抖音吧~”,然后微信如果同意抖音的申请的话就会给抖音一个client_id和client_secret。
问题2:
应该直接返回到抖音服务器,抖音服务器拿到后再考虑如何使用(比如cookie,session或者存数据库之类的)
问题3:
点击这个微信的小图标后,先请求抖音的服务器,抖音的服务器上会重新构建一个url作为向微信请求授权的地址(比如带上redirect_uri,grant_type,client_id等参数),然后重定向到新构建的这个url