我想通过AFS验证我的web2py应用程序的用户。不幸的是,似乎pam.py模块不支持AFS,只有本地用户。是否可以用pam来做到这一点,还是应该使用其他的东西?Web2py和AFS身份验证
回答
使用PAM可能是你想要做的,因为web2py没有任何对AFS或krb5的内置支持。为了验证非本地用户,您需要指定一个不同的PAM服务进行身份验证,并修改本地PAM配置以使该服务能够向AFS进行身份验证。
它看起来像pam_auth.py模块不支持除默认“登录”之外使用PAM服务,但它看起来很简单,或者创建自己的。你只需要这样做:
from gluon.contrib.pam import authenticate
def mypam_auth():
def pam_auth_aux(username, password):
return authenticate(username, password, "myservice")
auth.settings.login_methods.append(mypam_auth())
其中“myservice”只是您选择的服务名称。然后您需要修改本地PAM配置以使“myservice”对AFS进行身份验证。在Linux上,这通常意味着创建一个文件/etc/pam.d/myservice,并用PAM配置填充以向AFS进行身份验证。
现在大多数AFS单元使用Kerberos 5进行身份验证,因此这意味着您需要对Kerberos 5进行身份验证,并且不需要打扰任何AFS内容(除非要验证用户是否拥有有效的AFS帐户;但这更像是授权而不是认证问题)。有几个指南和示例用于设置krb5登录PAM,例如:http://techpubs.spinlocksolutions.com/dklar/kerberos.html#PAM_configuration
您可以尝试遵循其中一个指南,但您可能只需要'auth'部分,因为您不需要需要担心会议和门票以及所有这些。您可能只需要/etc/pam.d/myservice是这样的:
auth required pam_krb5.so no_ccache use_first_pass
auth required pam_deny.so
如果“AFS认证”你的意思是老kaserver基于krb4用的身份验证,而不是KRB5(也就是,你用“KLOG '来验证AFS而不是'kinit'和'aklog'或'klog.krb5'),您需要使用pam_afs.so PAM模块。像这样的东西可能会奏效:
auth required pam_afs.so use_first_pass
auth required pam_deny.so
如果您没有在本地计算机上的本地PAM配置控制,可以改为尝试通过生成一个“的kinit”(KRB5)或“KLOG”来验证用户身份(旧kaserver)命令,并在该命令的标准输入上输入密码。这不是很优雅,但它应该工作。
由于web2py是基于web的,而且由于AFS使用Kerberos,所以您肯定需要在用户和web2py层之间传递Kerberos票据,以便让web2py以用户的名义获得AFS令牌。
您可以使用带有SPNEGO的Kerberos将浏览器认证到Web服务器。浏览器需要配置为允许委派(如this example with a Java SPNEGO filter中所述)。
如果您设法在您的web2py应用程序中获得委派的Kerberos票证,您应该能够使用aklog
获取AFS令牌。
我对web2py并不是很熟悉,但快速浏览一下文档并没有显示太多支持SPNEGO的迹象:您可能必须自己实现它。 (如果你可以找到一个支持它的现有GSS库,它应该“只”是在浏览器和这个库之间来回传递SPNEGO令牌,只要它被正确配置就可以了。 Python,但this Java/JGSS tutorial可能会告诉你需要什么,如果你发现一个相当于JGSS的Python)
请注意,不要在同一进程用户运行时共享所有传入请求(可能来自不同用户)的AFS标记web2py中。您可能需要考虑从web2py层查看PAG(进程身份验证组)。您需要将这些流程绑定到到达web2py的请求。
实际上,我不需要执行任何操作/从用户那里获取AFS令牌,我只需要对他进行身份验证,以确保他被允许登录到我的应用程序。它使事情变得更简单吗?以任何方式感谢您提供完整的答案。 – user149377
对不起,我不太清楚你正在尝试做什么。您的web2py应用程序和AFS如何协同工作,这与身份验证有什么关系? – Bruno
对于用户能够登录到我的应用程序,我想确保他有一个AFS帐户。如果他在特定单元格上没有AFS帐户,我不会让他进入。我想我可以使用PAM来检查用户是否存在,但是PAM当然仅用于本地用户身份验证。一旦我确定用户是AFS用户,他就可以访问该应用程序。 – user149377
- 1. Web2py中的命令行身份验证
- 2. 是SQL Server身份验证和Windows身份验证
- 3. Ajax:HTTP基本身份验证和身份验证Cookie
- 4. Windows身份验证和表单身份验证
- 5. 表单身份验证和身份验证票据Cookie域
- 6. Azure身份验证和OAuth身份验证
- 7. Google身份验证和Facebook身份验证
- 8. CakePHP 2.0身份验证和基本身份验证
- 9. RESTful端点的身份验证 - 基本身份验证和XHR
- 10. Firefox不显示身份验证提示和Windows身份验证
- 11. 多个身份验证方案和WWW身份验证挑战
- 12. HTTPS和BASIC身份验证
- 13. GWT和身份验证
- 14. EmberFire身份验证和ToriiFirebaseAdapter
- 15. Cookie和身份验证-ASP.net
- 16. windows身份验证和iOS7
- 17. 身份验证和授权
- 18. Flutter:Facebook和Google身份验证
- 19. DNN和Windows身份验证
- 20. Asp.net和Windows身份验证
- 21. R和Windows身份验证
- 22. Jenkins和Git身份验证
- 23. JSP和OAUTH2身份验证
- 24. 身份验证和Django 1.5
- 25. Django,cordova和身份验证
- 26. WebServiceHostFactory和IIS身份验证
- 27. WCF和身份验证
- 28. 设计和身份验证
- 29. 身份验证和授权
- 30. ASP.Net身份验证和Googlebot
工作,谢谢! – user149377