Metabase-BI系列04:cookie实现单点登录sso

2019-12-01  本文已影响0人  diss带码

概述

​ Metabase 可以作为独立的BI平台,本身就有用户组和权限组。而且Metabase支持报表的分享和iframe嵌入的方式进行报表的呈现,我们可以通过这种方式进行数据的呈现。

​ 我们需要登录Metabase系统进行报表创建和发布,如果业务平台有权限的用户想通过业务平台用户进入到Metabase里面,就需要进行单点登录,因为用户不可能登录两个平台用两个账户,当然如果用户能够接受,那就可以用两个账户了。

​ Metabase支持多种单点登录(sso)方式:

这里介绍通过cookie实现简单的单点登录

Metabase-cookie

metabase.SESSION_ID

首先看一下Metabase里面的cookie, metabase.SESSION就是Metabase访问权限的令牌,path为“/”根目录下面,所以获取令牌,将把令牌塞到metabase.SESSION里就可以了。

Metabase-cookie

/api/session/

Metabase doc API说明如下:

## `POST /api/session/`**
Login.
**##### PARAMS:**
\* ***\*****`username`*****\*** value must be a non-blank string.
\* ***\*****`password`*****\*** value must be a non-blank string.

所以,我们需要调用/api/session/,传入用户和密码,获取令牌

cookie01 cookie02

跨域问题

直接访问Metabase的/api/session会存在跨域的问题

404 cors

修改Metabase后台允许跨域,Metabase后台用的Ring框架控制跳转,我们引入开源的ring-cors框架,配置允许跨域的域和请求,配置Metabase的handler.clj

(require '[ring.middleware.cors :refer [wrap-cors]])
(def handler
  (wrap-cors my-routes :access-control-allow-origin [#"http://example.com"]
                       :access-control-allow-methods [:get :put :post :delete]))

cookie共享问题

对于cookie来说,不同域下的cookie不共享,必须在同个顶级域下设置cookie,所以这也是这种cookie实现单点比较受限制的问题。

对于统一域名不同端口的情况,直接将cookie放到path根目录“/”即可,因为域是相同的

对于不同的二级域名的情况,放到顶级域名下即可

如:aa.test.com和bb.test.com

Cookies.set('metabase.SESSION', token, { path: '/',domain: '.test.com' })

关于cookie的介绍,推荐文章: https://www.cnblogs.com/hujunzheng/p/5744755.html

blog连接: https://dumplingbao.github.io/2019/11/29/metabase-bi-cookie/

上一篇 下一篇

猜你喜欢

热点阅读