在一些大型互联网公司,随着公司的业务发展逐渐庞大,须要和外部合伙伙伴进行合做,须要将公司的接口开放给外部其余合伙伙伴进行调用。git
好比腾讯的 QQ互联网、微信开放平台、蚂蚁金服开放平台 、钉钉开放平台、微博开放平台,好比实现功能QQ联合登录、微信扫码登录好比腾讯的QQ互联网、微信开放平台、蚂蚁金服开放平台 、微博开放平台,好比实现功能QQ联合登录、微信扫码登录。web
还有就是在大型集团公司中,分为总公司,和旗下多个分公司,总公司与分公司相互通信也能够采用开放平台形式对接口进行受权。spring
OAuth: OAuth(开放受权)是一个开放标准,容许用户受权第三方网站访问他们存储在另外的服务提供者上的信息,而不须要将用户名和密码提供给第三方网站或分享他们数据的全部内容。安全
QQ登陆OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都须要显式的向用户征求受权。
QQ登陆OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户受权,相对于之前的 OAuth1.0协议,其认证流程更简单和安全。springboot
在开放平台接口设计中,遵循Oauth2.0认证受权协议 JWT。微信
QQ受权用到的字段属性介绍:app
appid:应用的惟一标识。在OAuth2.0认证过程当中,appid的值即为oauth_consumer_key的值。商户号 永久不能进行修改的,就像咱们的身份证号同样。微服务
appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程当中,appkey的值即为oauth_consumer_secret的值。商户密钥 这个能够进行修改,可是应该注意修改过以后进行同步的问题。网站
受权码Code:获取accessToken。spa
accessToken:调用接口权限访问令牌。
回调地址:受权成功以后,重定向的地址。
openId:开放平台生产惟一的用户Id。
OAuth认证和受权的过程以下:
一、用户访问第三方网站网站,想对用户存放在服务商的某些资源进行操做。
二、第三方网站向服务商请求一个临时令牌。
三、服务商验证第三方网站的身份后,授予一个临时令牌。
四、第三方网站得到临时令牌后,将用户导向至服务商的受权页面请求用户受权,而后这个过程当中将临时令牌和第三方网站的返回地址发送给服务商。
五、用户在服务商的受权页面上输入本身的用户名和密码,受权第三方网站访问所相应的资源。
六、受权成功后,服务商将用户导向第三方网站的返回地址。
七、第三方网站根据临时令牌从服务商那里获取访问令牌。
八、服务商根据令牌和用户的受权状况授予第三方网站访问令牌。
九、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。
一、 生成受权Code连接,获取受权码
二、 根据用户获取的受权码,获取对应的AccessToken
三、 根据AccessToken获取对应的openId
四、 根据openId获取对应的用户信息
在Spring Cloud须要使用oauth2来实现多个微服务的统一认证受权,经过向OAUTH服务发送某个类型的grant type进行集中认证和受权,从而得到access_token,而这个token是受其余微服务信任的,咱们在后续的访问能够经过access_token来进行,从而实现了微服务的统一认证受权。
客户端根据约定的ClientID、ClientSecret、Scope来从Access Token URL地址获取AccessToken,并通过AuthURL认证,用获得的AccessToken来访问其余资源接口。
Spring Cloud oauth2 须要依赖Spring security
一、Resource Server:被受权访问的资源
二、Authotization Server:OAuth认证受权中心
三、Resource Owner: 用户
四、Client:使用API的客户端(如Android 、IOS、web app)
一、受权码模式(authorization code)用在客户端与服务端应用之间受权,作受权使用。
二、简化模式(implicit)用在移动app或者web app(这些app是在用户的设备上的,如 在手机上调起微信来进行认证受权)
三、密码模式(resource owner password credentials)应用直接都是受信任的(都是由一家公司开发的),使用密码进行验证登陆的。
四、客户端模式(client credentials)用在应用API访问
QQ开放平台地址:http://wiki.connect.qq.com/