IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> grafana接入oauth2 -> 正文阅读

[网络协议]grafana接入oauth2

grafana接入oauth2

grafana配置

安装grafana之后,配置文件grafana.ini默认会在/etc/grafana路径下

修改grafana.ini配置

vim grafana.ini 

要修改部分

[server]
# Protocol (http, https, h2, socket)
;protocol = http

# The ip address to bind to, empty will bind to all interfaces
;http_addr =

# The http port  to use
;http_port = 3000

# The public facing domain name used to access grafana from a browser
;domain = localhost

# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
;enforce_domain = false

# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
;root_url = %(protocol)s://%(domain)s:%(http_port)s/
root_url = http://192.168.146.18:3000 #grafana访问地址 用于授权回调

[auth.generic_oauth]
enabled = true # 默认是false,改为true。打开oauth认证
name = OAuth
allow_sign_up = true
client_id = some_id #自研平台唯一client_id
client_secret = some_secret #自研平台唯一client_secret
scopes = user:email,read:org
auth_url = http://192.168.208.97:8080/login/oauth/authorize #自研平台授权认证接口
token_url = http://192.168.208.97:8080/login/oauth/token #自研平台生成token接口
api_url = http://192.168.208.97:8080/login/oauth/userinfo #自研平台验证token并返回用户信息

接口开发

注意:这些接口都是grafana静默调用

授权认证接口

请求方式:get

请求路径:/login/oauth/authorize

请求参数

类型名称描述
Stringaccess_typeonline
StringstateJTlwwAomCy2-H0maDX7JJpzVOCA_-RUfjqlftMoMt7w=当前请求唯一密文
Stringredirect_urihttp://192.168.146.18:3000/login/generic_oauth配置文件root_url加固定/login/generic_oauth,用于重定向
Stringresponse_typecode
Stringscopeid email nickname配置文件scope
Stringclient_idsome_id平台唯一client_id

接口内部实现client_id验证和用户信息查询验证之后将用户id和参数state用做重定向参数

重定向地址:http://192.168.146.18:3000/login/generic_oauth?state={state}&code=xxx

代码示例

@RestController
@Slf4j
@RequestMapping("/login/oauth")
public class AuthApi {

    @GetMapping("/authorize")
    public void authorize(@RequestParam Map<String, String> params, HttpServletResponse response, HttpServletRequest request) throws IOException {
        for (Map.Entry<String, String> entry : params.entrySet()) {
            System.out.println(entry.getKey() + "-------------" + entry.getValue());
        }

        /* 核心业务逻辑 验证client_id 和用户信息 获取用户id*/
        String userId = "xxx";
        builder.append("state=").append(params.get("state")).append("&code=").append(JWTUtil.createToken(userId, "jwt".getBytes(StandardCharsets.UTF_8)));
        
        String url = "http://192.168.146.18:3000/login/generic_oauth?" + builder.toString();
        System.out.println(url);
        response.sendRedirect(url);
    }
}

生成token接口

请求方式:post

请求路径:/login/oauth/token

请求参数

类型名称描述
Stringcodexxx授权接口的用户id
Stringgrant_typeauthorization_code固定值
Stringredirect_urihttp://192.168.146.18:3000/login/generic_oauth配置文件root_url加固定/login/generic_oauth,用于重定向

返回参数

类型名称描述
Stringaccess_token认证token
Stringtoken_typeBearer验证token会将其添加到token首部
Stringexpiry_in
Stringrefresh_token

代码示例

 @PostMapping("/token")
    public TokenResponse token(TokenParam tokenParam){
        System.out.println(tokenParam);
		
        /* 核心业务逻辑 生成token */
        String token = xxx;
        TokenResponse response = new TokenResponse();
        response.setAccess_token(xxx);
        response.setToken_type("Bearer");
        response.setExpiry_in("1");
        response.setRefresh_token("123456");

        return response;
    }

验证token接口

请求方式:get

请求路径:/login/oauth/userinfo

请求头信息

类型名称描述
StringauthorizationBearer xxxtoken_type + access_token

请求参数:无

返回参数

类型名称描述
Stringnamelzz用户名
Stringemailliuzhuzheng@talkweb.com.cn用户邮箱

代码示例

@GetMapping("/userinfo")
    public User userInfo(HttpServletRequest request){
        System.out.println(2222);

        String authorization = request.getHeader("authorization");
        System.out.println(authorization);

        /* 核心业务逻辑,验证token并设置用户信息*/
        
        User user = new User();
        user.setEmail("liuzhuzheng@talkweb.com.cn");
        user.setName("lzz");

        return user;
    }

测试

访问http://192.168.146.18:3000/login/generic_oauth便可实现用户注册登录grafana

其他代码

TokenParam类

@Data
public class TokenParam {
    private String code;

    private String grant_type;

    private String redirect_uri;
}

TokenResponse类

@Data
public class TokenResponse {
    private String access_token;
    
    private String token_type;
    
    private String expiry_in;
    
    private String refresh_token;
}

User类

@Data
public class User {
    private String id;

    private String email;

    private String name;
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 12:07:35  更:2022-02-26 12:11:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:32:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码