使用 Grafana 进行自动身份验证 API
Automatic Authentication using Grafana API
在我的 Web 应用程序中,我想提供将经过身份验证的用户从我的仪表板传递到 Grafana 的功能。
一旦用户使用凭据登录我的仪表板,Grafana 仪表板的 link 将显示在我的应用程序上。当用户点击link时,he/she将被重定向到Grafana页面并自动登录,而不显示Grafana登录页面。我不希望我的用户必须遇到第二个登录屏幕,在那里他们会对输入什么感到困惑 username/password。
我已关注 Automatic login to grafana from web application, Auto login to grafana dashboard,使用凭据或令牌从 Web 应用程序自动登录到 grafana
和 Automatic login by token url,但运气不好。我找不到合适且干净的解决方案。
我正在使用安装在 Ubuntu Server 18.04 上的 Grafana v6.2.5。
我该如何实施?任何帮助将不胜感激。
服务器详细信息:Ubuntu服务器 18.04,Apache 2.4.29
经过一番挖掘,我找到了使用 Grafana 的解决方法 Generic OAuth Authentication。
第 1 步: 创建包含以下代码的文件。
GrafanaOAuth.php
:
<?php
declare(strict_types=1);
class GrafanaOAuth
{
protected $user;
/**
* Create a new GrafanaOAuth instance.
* @param array $user
* @return void
*/
public function __construct(array $user)
{
$this->user = $user;
}
/**
* Redirect to authentication URL.
* @param string $state
* @return void
*/
public function auth(string $state): void
{
$state = urlencode($state);
$url = "http://localhost:3000/login/generic_oauth?state={$state}&code=cc536d98d27750394a87ab9d057016e636a8ac31";
header("Location: {$url}");
}
/**
* User access token.
* @return void
*/
public function token(): void
{
$token = [
'access_token' => $this->user['access_token'],
'token_type' => 'Bearer',
'expiry_in' => '1566172800', // 20.08.2019
'refresh_token' => $this->user['refresh_token']
];
echo json_encode($token);
}
/**
* User credentials.
* @return void
*/
public function user(): void
{
$user = [
'username' => $this->user['username'],
'email' => $this->user['email']
];
echo json_encode($user);
}
}
oauth/auth.php
:
<?php
declare(strict_types=1);
require __DIR__ . '/../GrafanaOAuth.php';
/**
* Fetch the details of Grafana user from your database.
*/
$user = [
'username' => 'nbayramberdiyev',
'email' => 'nbayramberdiyev@outlook.com',
'dasboard_id' => 'oNNhAtdWz',
'access_token' => md5(uniqid('nbayramberdiyev', true)),
'refresh_token' => md5(uniqid('nbayramberdiyev', true))
];
(new GrafanaOAuth($user))->auth($_GET['state']);
oauth/token.php
:
<?php
declare(strict_types=1);
header('Content-Type: application/json');
require __DIR__ . '/../GrafanaOAuth.php';
/**
* Fetch the details of Grafana user from your database.
*/
$user = [
'username' => 'nbayramberdiyev',
'email' => 'nbayramberdiyev@outlook.com',
'dasboard_id' => 'oNNhAtdWz',
'access_token' => md5(uniqid('nbayramberdiyev', true)),
'refresh_token' => md5(uniqid('nbayramberdiyev', true))
];
(new GrafanaOAuth($user))->token();
oauth/user.php
:
<?php
declare(strict_types=1);
header('Content-Type: application/json');
require __DIR__ . '/../GrafanaOAuth.php';
/**
* Fetch the details of Grafana user from your database.
*/
$user = [
'username' => 'nbayramberdiyev',
'email' => 'nbayramberdiyev@outlook.com',
'dasboard_id' => 'oNNhAtdWz',
'access_token' => md5(uniqid('nbayramberdiyev', true)),
'refresh_token' => md5(uniqid('nbayramberdiyev', true))
];
(new GrafanaOAuth($user))->user();
custom.js
:
$(function() {
'use strict';
if (location.pathname === '/login') {
location.href = $('a.btn-service--oauth').attr('href');
}
});
第 2 步: 编辑 Grafana 配置文件,该文件位于 Ubuntu/Debian 的 /etc/grafana/grafana.ini
,[=78= 的 /usr/local/etc/grafana/grafana.ini
], <GRAFANA_PROJECT_FOLDER>/conf/custom.ini
在 Windows.
取消注释这些行并输入您的 client_id
、client_secret
、auth_url
、token_url
、api_url
:
#################################### Generic OAuth ##########################
[auth.generic_oauth]
;enabled = true
;name = OAuth
;allow_sign_up = false
;client_id = some_id
;client_secret = some_secret
;scopes = user:email,read:org
;auth_url =
;token_url =
;api_url =
像这样:
#################################### Generic OAuth ##########################
[auth.generic_oauth]
enabled = true
name = OAuth
allow_sign_up = false
client_id = YOUR_APP_CLIENT_ID
client_secret = YOUR_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = http://foo.bar/oauth/auth.php
token_url = http://foo.bar/oauth/token.php
api_url = http://foo.bar/oauth/user.php
第 3 步: 将 custom.js
放入 /usr/share/grafana/public/build/index.html
文件 (Ubuntu / Debian) 的 <body>
标签底部.
第 4 步: 重启 Grafana 服务器。
sudo service grafana-server restart
(Ubuntu / Debian)
brew services restart grafana
(MAC)
示例和详细解释,看我的Github repo。
在我的 Web 应用程序中,我想提供将经过身份验证的用户从我的仪表板传递到 Grafana 的功能。
一旦用户使用凭据登录我的仪表板,Grafana 仪表板的 link 将显示在我的应用程序上。当用户点击link时,he/she将被重定向到Grafana页面并自动登录,而不显示Grafana登录页面。我不希望我的用户必须遇到第二个登录屏幕,在那里他们会对输入什么感到困惑 username/password。
我已关注 Automatic login to grafana from web application, Auto login to grafana dashboard,使用凭据或令牌从 Web 应用程序自动登录到 grafana 和 Automatic login by token url,但运气不好。我找不到合适且干净的解决方案。
我正在使用安装在 Ubuntu Server 18.04 上的 Grafana v6.2.5。
我该如何实施?任何帮助将不胜感激。
服务器详细信息:Ubuntu服务器 18.04,Apache 2.4.29
经过一番挖掘,我找到了使用 Grafana 的解决方法 Generic OAuth Authentication。
第 1 步: 创建包含以下代码的文件。
GrafanaOAuth.php
:
<?php
declare(strict_types=1);
class GrafanaOAuth
{
protected $user;
/**
* Create a new GrafanaOAuth instance.
* @param array $user
* @return void
*/
public function __construct(array $user)
{
$this->user = $user;
}
/**
* Redirect to authentication URL.
* @param string $state
* @return void
*/
public function auth(string $state): void
{
$state = urlencode($state);
$url = "http://localhost:3000/login/generic_oauth?state={$state}&code=cc536d98d27750394a87ab9d057016e636a8ac31";
header("Location: {$url}");
}
/**
* User access token.
* @return void
*/
public function token(): void
{
$token = [
'access_token' => $this->user['access_token'],
'token_type' => 'Bearer',
'expiry_in' => '1566172800', // 20.08.2019
'refresh_token' => $this->user['refresh_token']
];
echo json_encode($token);
}
/**
* User credentials.
* @return void
*/
public function user(): void
{
$user = [
'username' => $this->user['username'],
'email' => $this->user['email']
];
echo json_encode($user);
}
}
oauth/auth.php
:
<?php
declare(strict_types=1);
require __DIR__ . '/../GrafanaOAuth.php';
/**
* Fetch the details of Grafana user from your database.
*/
$user = [
'username' => 'nbayramberdiyev',
'email' => 'nbayramberdiyev@outlook.com',
'dasboard_id' => 'oNNhAtdWz',
'access_token' => md5(uniqid('nbayramberdiyev', true)),
'refresh_token' => md5(uniqid('nbayramberdiyev', true))
];
(new GrafanaOAuth($user))->auth($_GET['state']);
oauth/token.php
:
<?php
declare(strict_types=1);
header('Content-Type: application/json');
require __DIR__ . '/../GrafanaOAuth.php';
/**
* Fetch the details of Grafana user from your database.
*/
$user = [
'username' => 'nbayramberdiyev',
'email' => 'nbayramberdiyev@outlook.com',
'dasboard_id' => 'oNNhAtdWz',
'access_token' => md5(uniqid('nbayramberdiyev', true)),
'refresh_token' => md5(uniqid('nbayramberdiyev', true))
];
(new GrafanaOAuth($user))->token();
oauth/user.php
:
<?php
declare(strict_types=1);
header('Content-Type: application/json');
require __DIR__ . '/../GrafanaOAuth.php';
/**
* Fetch the details of Grafana user from your database.
*/
$user = [
'username' => 'nbayramberdiyev',
'email' => 'nbayramberdiyev@outlook.com',
'dasboard_id' => 'oNNhAtdWz',
'access_token' => md5(uniqid('nbayramberdiyev', true)),
'refresh_token' => md5(uniqid('nbayramberdiyev', true))
];
(new GrafanaOAuth($user))->user();
custom.js
:
$(function() {
'use strict';
if (location.pathname === '/login') {
location.href = $('a.btn-service--oauth').attr('href');
}
});
第 2 步: 编辑 Grafana 配置文件,该文件位于 Ubuntu/Debian 的 /etc/grafana/grafana.ini
,[=78= 的 /usr/local/etc/grafana/grafana.ini
], <GRAFANA_PROJECT_FOLDER>/conf/custom.ini
在 Windows.
取消注释这些行并输入您的 client_id
、client_secret
、auth_url
、token_url
、api_url
:
#################################### Generic OAuth ##########################
[auth.generic_oauth]
;enabled = true
;name = OAuth
;allow_sign_up = false
;client_id = some_id
;client_secret = some_secret
;scopes = user:email,read:org
;auth_url =
;token_url =
;api_url =
像这样:
#################################### Generic OAuth ##########################
[auth.generic_oauth]
enabled = true
name = OAuth
allow_sign_up = false
client_id = YOUR_APP_CLIENT_ID
client_secret = YOUR_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = http://foo.bar/oauth/auth.php
token_url = http://foo.bar/oauth/token.php
api_url = http://foo.bar/oauth/user.php
第 3 步: 将 custom.js
放入 /usr/share/grafana/public/build/index.html
文件 (Ubuntu / Debian) 的 <body>
标签底部.
第 4 步: 重启 Grafana 服务器。
sudo service grafana-server restart
(Ubuntu / Debian)brew services restart grafana
(MAC)
示例和详细解释,看我的Github repo。