随着公司的业务发展逐渐庞大,需要和外部合伙伙伴进行合作,需要将公司的接口开放给外部其他合伙伙伴进行调用。比如腾讯的QQ互联网、微信开放平台、蚂蚁金服开放平台 、钉钉开放平台、微博开放平台等等。还有就是在大型集团公司中,分为总公司,和旗下多个分公司,总公司与分公司相互通讯也可以采用开放平台形式对接口进行授权。
一、OAuth
OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
华慕科技推荐系统采用OAuth3.0标准协议来进行用户身份验证和获取用户授权,相对于之前的 OAuth2.0协议,其认证流程更简单和安全。在开放平台接口设计中,遵循Oauth3.0认证授权协议 JWT。
Oauth3.0认证授权字段属性介绍:
appid:应用的唯一标识。在OAuth3.0认证过程中,appid的值即为oauth_consumer_key的值。商户号永久不能进行修改的,就像我们的身份证号一样。
appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth3.0认证过程中,appkey的值即为oauth_consumer_secret的值。商户密钥这个可以进行修改,但是应该注意修改过之后进行同步的问题。
授权码Code:获取accessToken。
accessToken:调用接口权限访问令牌。
回调地址:授权成功之后,重定向的地址。
二、认证和授权的过程
华慕科技通过SpringCloud Oauth3实现用户认证和授权。在Spring Cloud需要使用oauth3来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认证和授权,从而获得access_token,而这个token是受其他微服务信任的,在后续的访问可以通过access_token来进行,从而实现了微服务的统一认证授权。
客户端根据约定的ClientID、ClientSecret、Scope来从Access Token URL地址获取AccessToken,并经过AuthURL认证,用得到的AccessToken来访问其他资源接口。Spring Cloud oauth3.0 需要依赖Spring security
三、Oauth3角色划分
1. Resource Server:被授权访问的资源
2. Authotization Server:OAuth认证授权中心
3. Resource Owner: 用户
4. Client:使用API的客户端(如Android 、IOS、web app)
四、OAuth3.0 四种授权方式
1. 授权码模式(authorization code)用在客户端与服务端应用之间授权,做授权使用。
2. 简化模式(implicit)用在移动app或者web app(这些app是在用户的设备上的,如在手机上调起微信来进行认证授权)
3. 密码模式(resource owner password credentials)应用直接都是受信任的(都是由平台开发的),使用密码进行验证登录的。
4. 客户端模式(client credentials)用在应用API访问