场景:
平台要集成grafana,想绕过用户登录,目前知道有2个方法。
前提:先修改配置defaults.ini/grafana.ini允许嵌入
allow_embedding = true
一是使用匿名登陆,最简单方便(推荐)
这种方案的前提是你的公司允许匿名登陆grafana(其实我觉得没啥问题)但是从安全的角度来说确实不太好,那好,接着往下看吧。
二是使用grafana颁发一个API Key
。
curl -H "Authorization: Bearer eyJrIjoiT2x0Zmhua3BCa2Z6TXpWUnBIT3UxSlV0M0lnWEhVYUYiLCJuIjoiZGV2b3BzcGxhdGZvcm0iLCJpZCI6MX0=" http://127.0.0.1:3000/api/dashboards/home
到这里就清晰了,只要增加一个Authorization就可以,最起码接口访问没问题。
问题:
1、最开始碰到的问题是代理后浏览器预检(即OPTIONS请求)过不去,那还玩啥,先过滤掉,看文末nginx配置。
2、vue中使用iframe碰到浏览器跨域问题
<template>
<iframe
<--这是一个grafana dashboard分享链接-->
src="http://z.zzd.com:81/d/aLUHoFdnk/new-dashboard-copy?orgId=1&theme=light&kiosk=tv"
frameborder="0"
width="100%"
height="100%"
allowtransparency
></iframe>
</template>
就加个nginx,配置允许跨域访问。结果访问是没问题,但是出现这么个报错。
仔细排查发现静态资源是可以了,但是api请求没有带过来。
按照上面配置一同乱改,也是不行。(如果你搞好了欢迎留言)
3、于是选了如下一个曲线救国的办法,增加一个新域名解析到grafana,在nginx上配置Authorization和Bearer配置(这时候直接访问nginx: z.zzd.com 就实现免登录了)
4、千万不要使用浏览器无痕模式访问,看图就懂了(超级坑,原来我早就弄好了,但是习惯用无痕模式访问。。。)
5、nginx配置
upstream archery-dev {
#server 192.168.0.104:3000;
server 172.16.10.82:3000;
}
server {
listen 80;
server_name z.zzd.com
# underscores_in_headers on;
access_log /var/log/nginx/archery-dev_access.log main;
error_log /var/log/nginx/archery-dev_error.log;
location / {
proxy_buffer_size 128k;
proxy_buffers 32 128k;
proxy_busy_buffers_size 128k;
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Methods '*';
add_header Access-Control-Allow-Credentials true;
#add_header Access-Control-Allow-Headers Authorization;
# 因为if中无法使用proxy_set_header字段,故先设置变量,再赋值给变量,再在proxy_set_header中设置Authorization
set $auth "";
if ($host ~* "(wisers.com.cn)|(z.zzd.com)|(localhost)|(127.0.0.1)")
{
set $auth 'Bearer eyJrIjoiT2x0Zmhua3BCa2Z6TXpWUnBIT3UxSlV0M0lnWEhVYUYiLCJuIjoiZGV2b3BzcGxhdGZvcm0iLCJpZCI6MX0=';
}
if ($request_method = OPTIONS) {
return 200;
}
proxy_set_header Host $host;
proxy_set_header Authorization $auth;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://archery-dev/;
}
}
6、ingress-nginx配置
参考我的另一篇文章
直接访问grafana流量:user —> nginx ----> grafana(old.zzd.com)
通过平台访问grafana流量:user—> 自建平台—> nginx —> grafana(z.zzd.com)
访问平台效果