前端:浏览器中运行的JS代码,后端:node服务 or java服务 or GO服务。
认证服务器即为提供认证服务的服务,比如QQ,某些SSO网站等。
1.为什么认证服务器返回code而不是直接返回token给浏览器?
因为安全。如果认证服务器直接将token返回给浏览器。那么黑客可以通过获取用户浏览器的token访问认证服务器对应资源服务器的资源。这就存在安全隐患。
而浏览器把code提交给应用服务器,应用服务器去换取token时,应用服务器需要提前client_secret,此时黑客没有client_secret无法成功获取token。也就无法直接访问用户在资源服务器的资源。避免发生这种安全隐患发生的可能性。
也就是说,认证服务器是认识应用服务器的。当前你把资料存储在认证服务器对应的资源服务器中,并告诉认证服务器你允许应用服务器或此资源,则资源服务器只允许“应用服务器+你的code”都正常时才会提供你的资源,这样黑客没有应用服务器的密码即使拿到了你的code也无法访问你的资源。
举个例子:
你(浏览器)在银行前台(认证服务器)将一笔黄金(你的数据,资源)存在了银行金库(资源服务器),现在你想把黄金给金铺(应用服务器)打造一个金马桶。此时你不想直接出面将黄金取出并转交给金铺,而是想让金库凭借某个凭证(code or token?)自己去取出黄金。