根据https://www.pgadmin.org/docs/pgadmin4/development/kerberos.html ,我正在尝试将 pgadmin4 容器映像与 kerberos 一起使用。
pgadmin 网络界面不断告诉我“未提供委托凭据”。但是 Authorization 标头传输正确。我在做什么错`?
这是一个卷曲转储:
命令行:
kinit myuser
curl -v --negotiate --user : http://***MYHOST***/login
输出:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 172.28.28.133:80...
* TCP_NODELAY set
* Connected to ***MYHOST*** (172.28.28.133) port 80 (#0)
* Server auth using Negotiate with user ''
> GET /login HTTP/1.1
> Host: ***MYHOST***
> Authorization: Negotiate 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
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: gunicorn
< Date: Tue, 07 Sep 2021 15:24:47 GMT
< Connection: keep-alive
< Content-Type: text/html; charset=utf-8
< Content-Length: 6073
< X-Frame-Options: SAMEORIGIN
< Content-Security-Policy: default-src ws: http: data: blob: 'unsafe-inline' 'unsafe-eval';
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Set-Cookie: pga4_session=f372e462-19be-4c4b-926f-d23469d51237!ckfFYMTygG5gvVXmXlhZglyHop4=; Expires=Wed, 08-Sep-2021 15:24:47 GMT; HttpOnly; Path=/; SameSite=Lax
<
{ [6073 bytes data]
<!DOCTYPE html>
<!--[if lt IE 7]>
<html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]>
<html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]>
<html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>pgAdmin 4</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- To set pgAdmin4 shortcut icon in browser -->
<link rel="shortcut icon" href="/favicon.ico?ver=50600"/>
<!-- Base template stylesheets -->
<link type="text/css" rel="stylesheet" href="/static/js/generated/style.css?ver=50600"/>
<link type="text/css" rel="stylesheet" href="/static/js/generated/pgadmin.style.css?ver=50600"/>
<link type="text/css" rel="stylesheet" href="/static/js/generated/pgadmin.css?ver=50600"/>
<!--View specified stylesheets-->
<script type="application/javascript">
/* This is used to change publicPath of webpack at runtime */
window.resourceBasePath = "/static/js/generated/";
</script>
<!-- Base template scripts -->
<script type="application/javascript"
src="/static/vendor/require/require.min.js?ver=50600"></script>
<script type="application/javascript">
require.config({
baseUrl: '',
urlArgs: 'ver=50600',
waitSeconds: 0,
shim: {},
paths: {
sources: "/static/js",
datagrid: "/static/js/generated/datagrid",
sqleditor: "/static/js/generated/sqleditor",
'pgadmin.browser.utils': "/browser/" + "js/utils",
'pgadmin.browser.endpoints': "/browser/" + "js/endpoints",
'pgadmin.browser.messages': "/browser/" + "js/messages",
'pgadmin.browser.constants': "/browser/" + "js/constants",
'pgadmin.server.supported_servers': "/browser/" + "server/supported_servers",
'pgadmin.user_management.current_user': "/user_management/" + "current_user",
'translations': "/tools/" + "translations"
}
});
</script>
<!-- View specified scripts -->
<script type="application/javascript" src="/static/js/generated/vendor.main.js?ver=50600" ></script>
<script type="application/javascript" src="/static/js/generated/vendor.others.js?ver=50600" ></script>
<script type="application/javascript" src="/static/js/generated/pgadmin_commons.js?ver=50600" ></script>
</head>
<body>
<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade
your browser</a> to improve your experience.</p>
<![endif]-->
<div class="container-fluid h-100 login_page">
<div style="position: fixed; top: 20px; right: 20px; width: 400px; z-index: 9999">
<div class="alert alert-danger alert-dismissible fade show" role="alert">
Delegated credentials not supplied.
<button onclick="hide()" type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">×</span></button>
</div>
</div>
<script>
function hide(){
var target = event.target || event.srcElement;
if (target.type === undefined)
target=target.parentNode;
target.parentNode.classList.remove("show");
}
</script>
<div class="row h-100 align-items-center justify-content-center">
<div class="col-md-6"><div class="pr-4">
<img src="/static/img/login.svg?ver=50600" alt="Login">
</div>
</div>
<div class="col-md-3">
<div class="panel-header text-color h4"><i class="app-icon pg-icon" aria-hidden="true"></i> pgAdmin 4</div>
<div class="panel-body">
<div class="d-block text-color pb-3 h5">Login</div>
<form action="/authenticate/login" method=
100 6073 100 6073 0 0 197k 0 --:--:-- --:--:-- --:--:-- 197k
* Connection #0 to host ***MYHOST*** left intact
"POST" name="login_user_form">
<input id="next" name="next" type="hidden" value="">
<input id="csrf_token" name="csrf_token" type="hidden" value="ImY4Y2U0NDVmOTZhYmNiYWM2MjU1Njk2YWUxNGU2ZTM2NjlmODgxODQi.YTeEPw.goqhnkaxNASl3A7wzXHiKeqEWis">
<div class="form-group mb-3 ">
<input class="form-control" placeholder="Email Address / Username" name="email"
type="text" autofocus>
</div>
<div class="form-group mb-3 ">
<input class="form-control" placeholder="Password" name="password"
type="password" autofocus>
</div>
<button name="internal_button" disabled class="btn btn-primary btn-block btn-login" type="submit" value="Login">Login</button>
<div class="form-group row mb-3 c user-language">
<div class="col-7"><span class="help-block"><a href="/browser/reset_password" class="text-white">Forgotten your password</a>?</span></div>
<div class="col-5">
<select class="form-control" name="language" value="en">
<option value="en" selected>English</option>
<option value="zh" >Chinese (Simplified)</option>
<option value="cs" >Czech</option>
<option value="fr" >French</option>
<option value="de" >German</option>
<option value="it" >Italian</option>
<option value="ja" >Japanese</option>
<option value="ko" >Korean</option>
<option value="pl" >Polish</option>
<option value="ru" >Russian</option>
<option value="es" >Spanish</option>
</select>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<script type="application/javascript">
</script>
</body>
</html>
编辑: 请理解我隐藏了主机、用户和领域来伪装我的雇主。
来自容器内部的更多详细信息:
/pgadmin4 # klist -k -t /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp Principal
---- ----------------- --------------------------------------------------------
3 01/01/70 00:00:00 HTTP/***MYHOST***@***MYREALM***
/pgadmin4 # kinit ***MYUSER***
Password for ***MYUSER***@***MYREALM***: ***
/pgadmin4 #
...所以我得出结论我的 keytab 是正确的,我的 kerberos 配置有效(由于 kinit 有效)(?)
顺便说一句,我在同一主机上使用具有相同 serviceprincipalname 的相同 keytab 和一个可以工作的 webserver 容器 - 所以我一般不怀疑 serviceprincipalname 有问题(?)