当前位置: 首页 > 知识库问答 >
问题:

为什么我使用pyKerberos(authGSSClientStep)在SSO上获得“找不到凭据缓存”?

上官恩
2023-03-14

我将SLES11与Python2.6和Apache Web应用程序一起使用。我有一个带有Kerberos的Active Directory服务器,我想将SSO与我的应用程序一起使用。

我已经在EXAMPLE. ORG域中创建了服务主体HTTP/host.example.org。此用户映射到虚拟用户app.dmy@EXAMPLE.ORG。

Kerberos在Linux客户端上运行良好,我可以初始化服务主体

kinit-s HTTP/host.example。组织app.dmy@EXAMPLE.ORG

klist公司

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: app.dmy@EXAMPLE.ORG

Valid starting     Expires            Service principal
09/28/15 14:27:27  09/28/15 14:37:27  HTTP/host.example.org@EXAMPLE.ORG


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

my/etc/krb5.conf看起来像:

  1 [libdefaults]
  2         ticket_lifetime = 600
  3         default_realm = EXAMPLE.ORG
  4         kdc_req_checksum_type = 2
  5         checksum_type = 2
  6         ccache_type = 1
  7         clockskew = 300
  8
  9 [kdc]
 10         profile = /var/lib/kerberos/krb5kdc/kdc.conf
 11
 12 [logging]
 13         kdc = FILE:/var/log/krb5/kdc.log
 14         admin_server = FILE:/var/log/krb5/adm.log
 15         default = FILE:/var/log/krb5/log.log
 16
 17 [realms]
 18 EXAMPLE.ORG = {
 19         kdc = adserver.example.org:88
 20         admin_server = adserver.example.org:749
 21         default_domain = EXAMPLE.ORG
 22 }
 23
 24 [domain_realm]
 25         example.org = EXAMPLE.ORG
 26         .example.org = EXAMPLE.ORG
 27
 28 [login]
 29         krb4_convert = 0

 30 [appdefaults]
 31         pam = {
 32                 ticket_lifetime = 1d
 33                 renew_lifetime = 1d
 34                 forwardable = true
 35                 proxiable = false
 36                 minimum_uid = 1
 37                 clockskew = 300
 38                 external = sshd
 39                 use_shmem = sshd
 40         }

如果我通过apache和mod\u auth\u kerb使用身份验证,则SSO可以正常工作。但是我想对连接有更多的控制,因此禁用了apache身份验证,并用python(cherrypy框架)编写了自己的模块。

我安装了pyKerberos(Kerberos1.2.2不起作用,Python崩溃并出现分段故障)。

这里我的python代码:

import kerberos
import base64

service = 'HTTP'
hostname = 'host.example.org'
# env.log(kerberos.checkPassword('app.dmy', 'xxx', service, 'EXAMPLE.ORG')
''' for testing works fine '''
spn = kerberos.getServerPrincipalDetails(service, hostname)
''' result service principla from keytab 
    HTTP/host.example.org@EXAMPLE.ORG'''
status, _ctxt = kerberos.authGSSClientInit(spn)
''' status = 1, _ctxt = context object '''
kerberos.authGSSClientStep(_ctxt, base64.b64encode(""))

我在日志中得到以下结果:

(('Unspecified GSS failure.  Minor code may provide more information', 851968), ('No credentials cache found', -1765328189))

高速缓存文件存在于tmp中,spn用kinit注册。

共有1个答案

澹台镜
2023-03-14

你说的程序不对。这是服务器端:GSSAPI接收器,用于验证HTTP客户端。您需要调用authGSSServer{Init,Step};就正在进行的实际GSSAPI调用而言,gss\u accept\u sec\u context()。您调用的是gss\u init\u sec\u context(),它抱怨在默认ccache中没有TGT形式的凭据可用于获取服务器票证。Kerberos中的服务器不需要相同类型的凭据;相反,他们有一个带有长期密钥的密钥表,不需要联系KDC来验证客户端。

 类似资料:
  • 问题内容: 我正在尝试在片段中使用RecyclerView。对于第一个选项卡,它显示得很好,但是当我滑动到第二个选项卡然后又回到第一个选项卡时,出现以下错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.support.v7.widget.RecyclerView $ LayoutManager.stopSmoothSc

  • 问题内容: 当我使用编译类时,收到此错误消息? 包不存在 我可以通过将其包含在编译类路径中来进行修复。 为什么不在默认的jdk类路径上? 是在类路径上,并包括其他软件包,但jce似乎很特殊? 问题答案: 好的,这是我的错误。我用来编译代码的Ant文件在任务中具有以下属性: h 您可以像这样添加JCE jar:

  • 问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检

  • 我试图找到这个按钮并点击它。但我得到了这个错误: 我注意到它正在寻找不同的字符串bc它在类名前面添加了这个点。这是问题吗? 非常感谢。

  • 测试代码为: 测试代码为: 你知道怎么了吗?

  • 我遇到JSON解析错误。我的代码如下: 我从我的检查中得到以下错误: 由于:com,无法分析JSON。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN\u对象,但在第1行第2列为BEGIN\u数组 对于我试图读取的JSON,如果成功,我的应该返回5。 我做错了什么?