Harbor对接OIDC

Harbor对接OIDCHarbor 对接 OIDCLinux 版本 Linuxnode33 10 0 1127 el7 x86 64 1SMPTueMar31 36 51UTC2020x86 64×86 64×86 64GNU Linux1 关闭防火墙和 selinux2 安装 docker ceyuminstall yyum utilsyum config manageradd repohttps download docker com linux centos

Linux版本:

Linux node3 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

1、关闭防火墙和selinux

2、安装docker-ce

yum install -y yum-utils

yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io -y

systemctl enable docker; systemctl start docker

3、安装docker-compose

harbor对docker-compose版本有要求,尽量安装较高版本

curl -L “https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

aarch64版本安装:

yum install python3-pip

pip3 install docker-compose

4、安装harbor

4.1 下载harbor

使用离线安装包安装

curl -OL https://github.com/goharbor/harbor/releases/download/v2.2.2/harbor-offline-installer-v2.2.2.tgz

4.2 解压

tar -xf harbor-offline-installer-v2.2.2.tgz

4.3 harbor配置

进入harbor目录,拷贝一份模板配置文件进行修改:

cd harbor

cp harbor.yml.tmpl harbor.yml

参数说明:

//node3为本机主机名,需要事先在/etc/hosts配好

hostname: node3

//使用oidc

auth_mode: oidc_auth

//修改登录密码

harbor_admin_password: 123

//如果使用http则把以下行注释:

‘’’

https:

  # https port for harbor, default is 443

  port: 445

  # The path of cert and key files for nginx

  certificate: /etc/harbor/node3.crt

  private_key: /etc/harbor/node3.key

‘’’

//如果使用https则把以下行注释,同时需要生成https所需文件:

‘’’

http:

  # port for http, default is 80. If https enabled, this port will redirect to https port

  port: 80

‘’’


使用该脚本即可,并将node3.key和node3.crt拷贝到harbor.yml配置文件中配置的路径,注意将以下脚本中的node3改为自己的域名或主机名:

openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650 -subj “/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=node3” -key ca.key -out ca.crt

openssl genrsa -out node3.key 4096

openssl req -sha512 -new -subj “/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=node3” -key node3.key -out node3.csr

cat > v3.ext <<-EOF

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

extendedKeyUsage = serverAuth

subjectAltName = @alt_names

[alt_names]

DNS.1=node3

DNS.2=node3.com

DNS.3=node3

EOF

openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in node3.csr -out node3.crt

openssl x509 -inform PEM -in node3.crt -out node3.cert

cp node3.crt /etc/pki/ca-trust/source/anchors/node3.crt

update-ca-trust


4.4 开始安装

如果使用http执行执行install.sh

如果使用https需要执行prepare脚本,经测试,只执行install.sh即可

./prepare

详见Harbor docs | Configure HTTPS Access to Harbor

问题:第一次配置即使用https,此时本地会提示本地没有prepare镜像,会从远端拉取,此时的做法应该是先执行install.sh脚本,再执行./prepare,然后再执行install.sh

5、登录harbor页面

注意:此时登录没有通过OIDC登录选项,需等到配置oidc且测试连接通过后才有该选项,此时暂不考虑,继续往下走

Harbor对接OIDC

注意使用浏览器打开harbor页面时使用域名,不要使用ip,否则在对接OIDC时会出现如下问题

https://github.com/goharbor/harbor/issues/12982

6、keycloak安装

docker run -p 172.20.42.54:8443:8443 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:13.0.1

注:8443即使用https,8080使用http,公网ip或harbor对接时必须使用https:

Keycloak Docker HTTPS required – Stack Overflow

keycloak默认使用H2数据库,keycloak容器重启数据会丢失,以下使用外部postgres数据库做持久化

6.1 docker network create keycloak-network

6.2 docker run -d –name postgres –net keycloak-network -v /data/keycloak/postgres:/var/lib/postgresql/data -e POSTGRES_DB=keycloak -e POSTGRES_USER=keycloak -e POSTGRES_PASSWORD=password postgres

6.3 docker run -d -p 172.20.42.183:8443:8443 –name keycloak –net keycloak-network -e ADDR=postgres -e DB_USER=keycloak -e DB_PASSWORD=password -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=Kylincloud@123. -e DB_VENDOR=postgres quay.io/keycloak/keycloak:13.0.1

参考: https://github.com/keycloak/keycloak-containers/blob/13.0.1/server/README.md

7、登录keyclock页面

https://IP:8443

Harbor对接OIDC

点击Administration Console登录管理员用户,密码admin/admin,docker run时可修改,也可进管理页面修改

Harbor对接OIDC

8、创建realm域

域之间相互隔离,点击左上角`Select realm`然后点击add realm添加域

Harbor对接OIDC

输入自定义名称,此处为harbor,点击create创建

Harbor对接OIDC

9、创建Clients

填入Client ID,harbor连接时需要;

Root URL为harbor根路由,最好使用域名,不使用ip

Harbor对接OIDC

10、配置Client

Harbor中Valid Redirect URLs必须为c/oidc/callback/,如果端口为443则不要在此添加端口号

Harbor对接OIDC

Harbor对接OIDC

Secret在harbor连接时会用到,如果界面没有此选项则不用改

Harbor对接OIDC

添加mapper,类型为Group Membership,Token Claim Name名称在harbor连接时会用到,添加此mapper才能与harbor间保持组同步

Harbor对接OIDC

11、创建组

Harbor对接OIDC

12、创建用户

加入到group1,firstName和LastName必填

Harbor对接OIDC

13、设置用户密码

Harbor对接OIDC

14、harbor配置

进入harbor页面进行配置

系统管理->配置管理->认证管理

注意:非*可不填,除组名称

OIDC Endpoint:keyclock地址,harbor为在keyclock添加的域名称,harbor前面的保持固定

OIDC客户端标识:keyclock创建的Client ID名称

OIDC客户端密码:keyclock中的Secret,上文有截图

组名称:与keyclock mapper中Token Claim Name一致

OIDC scope: 必须包含openid

自动登录:勾选表示直接使用keyclock中的用户名

详见Harbor docs | Configure OIDC Provider Authentication

Harbor对接OIDC

Harbor对接OIDC

测试通过后保存,然后退出登录

15、通过OIDC登录

Harbor对接OIDC

会跳转到如下界面:

Harbor对接OIDC

输入用户名密码后会跳转到harbor

Harbor对接OIDC

此时再使用admin用户登录harbor,能看到用户管理中多了一个test的用户,组管理中多了一个/group1的组,这是从keyclock同步而来

问题:

[ERROR] [/core/controllers/oidc.go:76]: State mismatch, in session: %!s(

), in url: 2pG0sDHtGx32UgFPRlDCag8CVdR17Qkf

解决方法:

使用域名在浏览器登录,不使用ip,如果使用ip登录harbor的话跳转到/c/oidc/login时也会使用ip,但是/c/oidc/callback/强制使用域名

详见:

https://github.com/goharbor/harbor/issues/12982

@lz006 @Leo-ljr

What you browser are you using? Is it Chrome?

Could you use the developer tools to check the requests to /c/oidc/login and /c/oidc/callback, has the cookie sid changed?

Are you using the same hostname to access the login page and in redirect URL of the OIDC provider?

参考链接

Harbor docs | Configure OIDC Provider Authentication

Harbor docs | Configure HTTPS Access to Harbor

Harbor docs | Configure the Harbor YML File

Harbor docs | Configure Harbor User Settings at the Command Line

Keycloak – Guide – Keycloak on Docker

Keycloak Docker HTTPS required – Stack Overflow

https://github.com/goharbor/harbor/issues/12982

Keycloak快速上手指南,只需10分钟即可接入Spring Boot/Vue前后端分离应用实现S【附源码】_Java_老男孩_51CTO博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177306.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:49
下一篇 2026年3月26日 下午7:49


相关推荐

  • Java Set集合的详解

    Java Set集合的详解一,SetSet:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。对象的相等性  引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号(j

    2022年6月13日
    30
  • 恩智浦被中国收购(光纤放大器调试图解)

    恩智浦半导体(NXPSemiconductorsN.V.)(纳斯达克:NXPI)日前推出业界首款能进行超宽带应用(470至806MHz)的宽带Doherty功率放大器,新产品采用BLF884P和BLF884PS架构的超宽带Doherty参考设计。全新70WDVB-TLDMOS设计采用能在超宽带范围内工作的恩智浦架构(正在申请专利),为广播发射机带来Doherty拓扑结构的效率提升。

    2022年4月17日
    134
  • java单例模式 三种_三种java单例模式概述

    java单例模式 三种_三种java单例模式概述在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的。Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。下面就来介绍一下这三种java单例模式的相关内容。java单例模式是一种常见的设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,这也是…

    2022年7月25日
    10
  • 哈佛的幸福课笔记

    哈佛的幸福课笔记觉得对本人而言有新信息的是第四课和第六课。第八课关于感恩,很好!(Tal和外婆的真实的故事,感人,几次热泪盈眶)。第10课关于改变当然很有用。第12、13课讨论关于建立自我和谐的目标和应对压力问题。哈佛的幸福课 http://v.163.com/special/positivepsychology/ (提醒:每课一个半小时) 第一课什么是积极心理学笔记:(简介)1、解读比

    2022年7月25日
    9
  • Linux远程连接工具:finalshell

    Linux远程连接工具:finalshell一 finalshell 介绍前面一直使用 xshell 作为 Linux 远程连接的工具 教程请看 通过 xshell 远程连接 ubuntu 但是 xshell 是付费软件 于是 找到一个 finalshell 作为其替换软件 FinalShell 是一体化的的服务器 网络管理软件 不仅是 ssh 客户端 还是功能强大的开发 运维工具 充分满足开发 运维需求 特色功能 云端同步 免费海外服务器远程桌面加速 ssh 加速 本地化命令输入框 支持自动补全 命令历史 自定义命令参数更多介绍 请自行百度 或查看官网介绍 http

    2026年3月19日
    3
  • 电子合同印章生成_全程电子化怎么打印章程

    电子合同印章生成_全程电子化怎么打印章程安装composerrequiretecnickcom/tcpdf示例代码try{$order=requestAPI(env(‘A2_URL’).’akinst/order/detail’,[‘user_id’=>Auth::id(),’order_number’=>$request->get(‘p’)]);$data=Arr::get($order,’0′,[]);$data[‘total_amount_ch’]=

    2025年8月28日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号