抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

61_1654131271466

简单说说什么是OIDC

简单来说,OIDC是一个OAuth2上层的简单身份层协议。它允许客户端验证用户的身份并获取基本的用户配置信息。OIDC使用JSON Web Token(JWT)作为信息返回,通过符合OAuth2的流程来获取对应的TOKEN信息。

它的作用是为多个不同的站点提供登录功能(和SSO类似)。每次需要使用OIDC登录网站时,都会被重定向到登录的OpenID网站,然后再回到该网站。例如,如果选择使用Github帐户登录Grafana,这就使用了OIDC。成功通过Github身份验证并授权Grafana访问您的信息后,Github会将有关用户和执行的身份验证的信息发送回Grafana。此信息在JWT中返回,包含ID Token或者Access Token。

这样就实现了简单的登录流程,OIDC主要有以下几个作用:

1、OIDC的协议简化了登录的流程开发工作,在支持OIDC的应用简单配置即可使用

2、OIDC的协议有组别概念,可以限制用户可访问的资源内容

3、一个账号根据不同的资源权限访问不同的站点内容

如何配置Authelia来支持grafana通过OIDC登录

先看官方文档 ,官方文档写的还是比较详细的,创建一个OIDC应用,只需要在configuration.yml的后面加上对应的配置即可,在本文中我以grafana配置为例,简单说明grafana使用Authelia来进行登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
identity_providers:
oidc:
hmac_secret: rc9uqHMWXf69M9TXrEfa2XoAtbXsbSGMvqWC
# issuer_private_key 这个字段的内容我直接用docker-compose里面的env来替代,减少yaml中的配置长度和保护机密
#AUTHELIA_IDENTITY_PROVIDERS_OIDC_ISSUER_PRIVATE_KEY_FILE=/config/key.pem
#issuer_private_key:
access_token_lifespan: 1h
authorize_code_lifespan: 1m
id_token_lifespan: 1h
refresh_token_lifespan: 90m
enable_client_debug_messages: false
enforce_pkce: public_clients_only
cors:
endpoints:
- authorization
- token
- revocation
- introspection
#这里允许配置为`*`,代表全部网站
allowed_origins: "*"
# - https://example.com
allowed_origins_from_client_redirect_uris: false
clients:
#如果多个应用,复制下面同样的一大串进行具体配置即可
- id: grafana
description: grafana
secret: GzPji9HrYbLQEX
sector_identifier: ''
public: false
#校验的级别,可以是one_factor等
authorization_policy: two_factor
pre_configured_consent_duration: ''
audience: []
#可以访问到的用户信息,具体有哪些,可以直接看官方文档的说明
scopes:
- openid
- groups
- email
- profile
#在auth登录成功后需要重定向的接口地址,不同的应用需要根据实际情况配置
redirect_uris:
- https://grafana.abc.com/login/generic_oauth
grant_types:
- refresh_token
- authorization_code
response_types:
- code
response_modes:
- form_post
- query
- fragment
userinfo_signing_algorithm: none

这样一个很简单的配置,就让Authelia实现了自身作为OIDC的身份提供商供 grafana 这个应用登录访问。

我们可以直接访问到你的authelia的地址来查看登录需要配置的端点信息:https://auth.example.com/.well-known/openid-configuration 将对应的auth.example.com 换成你自己的域名。

如何配置Grafana来使用Authelia提供的OIDC进行登录

grafana 配置OIDC的登录官方也有完善的文档,但是我也遇到了一些小的坑点,所以我会在贴配置的同时,说明我遇到的坑点(其实是我菜)。

使用开源项目的对应功能,肯定第一步是看官方文档 ,官方文档还是写的比较详细,但是它是一个通用文档,我们需要根据实际情况做一下小的变更。

grafana使用docker-compose启动

我的grafana是使用docker-compose启动的,它的配置很简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
---
version: '3.3'

services:
grafana:
image: grafana/grafana-oss:${grafana_version}
networks:
- gateway
container_name: grafana
command:
- 'grafana-server --config /etc/grafana/grafana.ini'
restart: unless-stopped
env_file: .env
volumes:
- ./grafana.ini:/etc/grafana/grafana.ini
- /data/grafana:/var/lib/grafana
healthcheck:
disable: false
environment:
- TZ=Asia/Shanghai
ports:
- 4000:3000
networks:
gateway:
external: true
...

这时候需要复制grafana的默认配置文件 来写到grafana.ini 文件中了,数据库信息什么的配置。

注意我在这里碰到了一个坑点:当你需要启用对应的配置时候,需要将 ;去掉,这样配置才能生效。(惯性思维是#,突然来个;号有点懵)。

grafana支持Authelia登录访问

grafana 的配置写的比较简单命令,其他配置忽略的情况下,以下几个配置就能支持到authelia的登录访问了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# The full public facing url you use in browser, used for redirects and emails
# 这个配置为你的grafana地址,需要进行配置
root_url = https://grafana.abc.com
# 如果仅限OAuth仅限登录的话设置为true(建议先设置为false,待修改OIDC的权限配置为admin之后再关闭)
disable_login_form = true
#################################### Generic OAuth ##########################
[auth.generic_oauth]
enabled = true
name = authelia
allow_sign_up = true
client_id = grafana
client_secret = GzPji9HrYbLQEX
scopes = openid profile groups email
empty_scopes = false
auth_url = https://auth.example.com/api/oidc/authorization
token_url = https://auth.example.com/api/oidc/token
api_url = https://auth.example.com/oidc/userinfo
use_pkce = true

配置完成后重启grafana之后,再次访问grafana就可以看到你配置的authelia登录框了,成果如下:

grafana_login_1654130801482

总结

实际上我总共配置了三个client: outlineportainer 这个参考官方文档即可配置成功、grafana,除了grafana花费了些许时间之外(主要是我菜,配置没有去掉;),其他两个配置都很简单。

现在authelia这个服务已经为我的数个网站提供登录保护支持,如果你有兴趣,可以与我一起交流探索更多的有趣的玩法,如果有遇到的一些问题欢迎一起探讨。

评论