关键词搜索

源码搜索 ×
×

微服务架构项目open-cloud的认证方式及单点登录应用

发布2022-11-08浏览980次

详情内容

上次说道,我目前在做的一个项目,用的是基于一个叫open-cloud的微服务框架。(微服务框架open-cloud应用及部署

该框架基于SpringCloud,认证使用oAuth2。见官方网站。虽然这个框架是几年前出来的,目前已经没有维护了,但对于我来说,仍然是学习的对象。

oAuth2的模式

我目前在做的项目,包含几个子系统,很自然的,需要用到单点登录。前面说到,open-cloud使用的是oAuth2的认证方式,但又可以细分为几种模式:
1)密码模式
输入账号口令,提交到 /oauth/token,返回token

2)授权码模式
打开子应用系统页面,发现未登录,则子应用系统会引导到uaa(open-cloud中负责认证的子系统),如:

http://localhost:8211/oauth/authorize?response_type=code&client_id=1553588629729&redirect_uri=http://www.baidu.com
  • 1

然后uaa响应,输出一个login页面。uaa是一个前后端不分,自带页面的子系统。
在这里插入图片描述
输入账号,口令后,提交到uaa后,uaa返回到应用子系统。

3)客户端模式(client_credentials)
没用到,略过不提。

在我们项目中,前2种方式都用了,大部分子系统用第一种,另外一个子系统属于拿现成系统修改集成,它用的是第二种。那么,如何进行单点登录呢?

多种oAuth认证模式下,如何打造单点登录

很简单,只要大家使用相同的appId,apiKey,secretKey就可以了。框架自然就实现了单点登录。比如用第一种模式页面进行了登录,那么打开那个集成子系统,会发现它也已经登录。
在这里插入图片描述
第一种模式的配置

exports.auth = {
  appId: "1666247793941",
  appKey: "b9y6VrLFeBcRRr1rWfZnP7x4",
  appSecret: "pWB0wbsndaQVH61Q15bZ8mJ6RLJcRolK",
};
  • 1
  • 2
  • 3
  • 4
  • 5

第二种模式的配置

#oauth2客户端配置
security:
  oauth2:
    client:
      client-id: b9y6VrLFeBcRRr1rWfZnP7x4
      client-secret: pWB0wbsndaQVH61Q15bZ8mJ6RLJcRolK
      access-token-uri: http://192.168.10.8:8212/oauth/token
      user-authorization-uri: http://192.168.10.8:8212/oauth/authorize
    resource:
      token-info-uri: http://192.168.10.8:8212/oauth/check_token
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

而且,并不需要大家指向同一个uaa。uaa是open-cloud的认证中心,我在测试的时候,部署了2个uaa,分处于不同的服务器,IP完全不一样,但这并不影响各子系统使用单点登录。可以推测系统产生的token,不是存在数据库,就是存在redis。事实证明,服务器端产生的token保存于redis,登录以后,将redis的数据清掉,子系统将会登出。

由此也可知,open-cloud提供的后台,有一个菜单项叫“应用管理”,那像我这种情况,应该是整个项目,不管有多少个子系统,都应该是同一个应用系统,而不是每个子系统定义一个应用。
在这里插入图片描述

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载