首页 > 技术文章 > 微服务开放平台接口设计

ming-blogs 2019-06-14 22:44 原文

什么是开放平台接口

在一些大型互联网公司,随着公司的业务发展逐渐庞大,需要和外部合伙伙伴进行合作,需要将公司的接口开放给外部其他合伙伙伴进行调用。

比如腾讯的 QQ互联网微信开放平台蚂蚁金服开放平台 、钉钉开放平台微博开放平台,比如实现功能QQ联合登陆、微信扫码登陆比如腾讯QQ互联网、微信开放平台、蚂蚁金服开放平台 、微博开放平台,比如实现功能QQ联合登陆、微信扫码登陆。

还有就是在大型集团公司中,分为总公司,和旗下多个分公司,总公司与分公司相互通讯也可以采用开放平台形式对接口进行授权。

什么是Oauth2.0

OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。

QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的 OAuth1.0协议,其认证流程更简单和安全。

在开放平台接口设计中,遵循Oauth2.0认证授权协议 JWT。

QQ授权用到的字段属性介绍:

appid:应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。商户号   永久不能进行修改的,就像我们的身份证号一样。

appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。商户密钥 这个可以进行修改,但是应该注意修改过之后进行同步的问题。

授权码Code:获取accessToken。

accessToken:调用接口权限访问令牌。

回调地址:授权成功之后,重定向的地址。

openId:开放平台生产唯一的用户Id。

Oauth2授权原理

OAuth认证和授权的过程如下:

1、用户访问第三方网站网站,想对用户存放在服务商的某些资源进行操作。

2、第三方网站向服务商请求一个临时令牌。

3、服务商验证第三方网站的身份后,授予一个临时令牌。

4、第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。

5、用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。

6、授权成功后,服务商将用户导向第三方网站的返回地址。

7、第三方网站根据临时令牌从服务商那里获取访问令牌。

8、服务商根据令牌和用户的授权情况授予第三方网站访问令牌。

9、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。

 

QQ联合登录的流程

1、 生成授权Code链接,获取授权码

2、 根据用户获取的授权码,获取对应的AccessToken

3、 根据AccessToken获取对应的openId

4、 根据openId获取对应的用户信息

 

SpringCloud Oauth2

在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

 Oauth2角色划分

1、Resource Server:被授权访问的资源

2、Authotization Server:OAuth认证授权中心

3、Resource Owner: 用户

4、Client:使用API的客户端(如Android 、IOS、web app)

OAuth2四种授权方式

1、授权码模式(authorization code)用在客户端与服务端应用之间授权,做授权使用。

2、简化模式(implicit)用在移动app或者web app(这些app是在用户的设备上的,如 在手机上调起微信来进行认证授权)

3、密码模式(resource owner password credentials)应用直接都是受信任的(都是由一家公司开发的),使用密码进行验证登录的。

4、客户端模式(client credentials)用在应用API访问

 

项目整合授权认认证中心程图

 

 

QQ开放平台地址:http://wiki.connect.qq.com/

源码地址:https://gitee.com/MingTian-NiHao/springboot-oauht2.0

推荐阅读