使用Kerberos的单点登录

SSO with Kerberos(使用Kerberos的单点登录)

本文介绍了使用Kerberos的单点登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Kerberos和Python flask-kerberos模块进行身份验证。 基本上这是我的代码:

DEBUG=True

app = Flask(__name__)
app.config.from_object(__name__)

os.environ['KRB5_KTNAME'] = "/home/myuser/Python3/KerberosAuthSSO"


@app.route("/")
@requires_authentication
def protected_view(user):
        os.environ['KRB5_KTNAME'] = "/home/myuser/Python3/KerberosAuthSSO/flask-sso.keytab"
        userinfo["user"] = user
        return jsonify(userinfo)

if __name__ == '__main__':
    init_kerberos(app)
    app.run(host='0.0.0.0')
这是该用户在Active Directory中的My userprinalName和serviceprinalName(我的用户原则名称和服务原则名称):

这就是我的Keytab的外观。

server.my.domain.com:~ # /usr/bin/klist -k -t /home/myuser/Python3/KerberosAuthSSO/flask-sso.keytab
Keytab name: FILE:/home/myuser/Python3/KerberosAuthSSO/flask-sso.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
   4 01/01/70 01:00:00 HTTP/server.my.domain.com@DOMAIN.COM
   4 01/01/70 01:00:00 HTTP/server.my.domain.com@DOMAIN.COM
   4 01/01/70 01:00:00 HTTP/server.my.domain.com@DOMAIN.COM
   4 01/01/70 01:00:00 HTTP/server.my.domain.com@DOMAIN.COM
   4 01/01/70 01:00:00 HTTP/server.my.domain.com@DOMAIN.COM

但是,当我运行该应用程序时,我收到以下错误:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/flask_kerberos.py", line 33, in init_kerberos
    principal = kerberos.getServerPrincipalDetails(service, hostname)
kerberos.KrbError: ('Cannot get sequence cursor from keytab', 21)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "__init__.py", line 26, in <module>
    init_kerberos(app, hostname="server.my.domain.com@DOMAIN.COM")
  File "/usr/lib/python3.4/site-packages/flask_kerberos.py", line 35, in init_kerberos
    app.logger.warn("Kerberos: %s" % exc.message[0])
AttributeError: 'KrbError' object has no attribute 'message'

很遗憾,我找不到导致此错误的原因。

推荐答案

如果您在使用HTTPd,请不要浪费时间,请使用https://github.com/gssapi/mod_auth_gssapi。可以通过Werkzeug/Flask联系到远程用户。

<Location /foo>
  AuthType GSSAPI
  AuthzSendForbiddenOnFailure On
  Require valid-user # Require user michael-o@EXAMPLE.COM
</Location>

这篇关于使用Kerberos的单点登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:使用Kerberos的单点登录

基础教程推荐