传统的第三方应用授权:
为了让第三方应用能够访问受保护资源,资源拥有者必需将他的私有证书(用户名和密码)透露给第三方。这样,资源拥有者无法在不影响所有第三方的前提下单独撤销某个第三方的访问权限,他只能通过修改密码来回收所有权限。
OAuth通过将客户端和资源拥有者的角色进行分离来解决这些问题。在OAuth中,客户端(通常不是资源拥有者,而是代表资源拥有者来操作)提出请求来访问由资源拥有者控制并由资源服务器托管的资源,然后得到与资源拥有者不同的一套私有证书。
OAuth为客户端提供了一种代表资源拥有者访问受保护资源的方法。在客户端访问受保护资源之前,它必须先从资源拥有者获取授权(访问许可),然后用访问许可交换访问令牌(代表许可的作用域、持续时间和其它属性)。客户端通过向资源服务器出示访问令牌来访问受保护资源。(关键是这个访问令牌被别人盗取了怎么办,或者有什么机制用来保证即使被盗取,别人也不会访问到受保护的资源)
授权服务器可以使用任一合适的私有证书集合和验证机制来对客户端进行身份验证。客户端一定不能在一个请求中使用多个私有证书集合和验证机制。
授权服务器必须能够使用请求参数和HTTP Basic验证协议两种方式接受客户端私有证书。授权服务器可以支持更多适合于密码证书传输的验证机制。
授权服务器不应该将user-agent重定向到没有注册过的或不信任的URI,以避免endpoint被用作一个公开的转向器。
重定向的url要事先注册,token就可以和重定向的url绑定,这个带来一个问题:开发调试的时候不能总是在那个url下进行用户鉴权的处理。
session_secret:基于http调用Open API时计算参数签名用的签名密钥。
获取Access Token时所返回的session_key和session_secret参数不是OAuth2.0协议标准规定的返回参数,而是百度OAuth2.0服务扩展加入的,目的是使得开发者可以基于http调用百度的Open API,因为基于https调用Open API虽然更为简单,但毕竟响应速度更差(比基于http的要差一倍时间左右)。