我想通過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. 多個身份驗證方案和WWW身份驗證挑戰
- 3. Azure身份驗證和OAuth身份驗證
- 4. 是SQL Server身份驗證和Windows身份驗證
- 5. 表單身份驗證和身份驗證票據Cookie域
- 6. Ajax:HTTP基本身份驗證和身份驗證Cookie
- 7. RESTful端點的身份驗證 - 基本身份驗證和XHR
- 8. Windows身份驗證和表單身份驗證
- 9. Google身份驗證和Facebook身份驗證
- 10. CakePHP 2.0身份驗證和基本身份驗證
- 11. Firefox不顯示身份驗證提示和Windows身份驗證
- 12. JWT身份驗證和用戶驗證
- 13. Cloudant身份驗證和XACML
- 14. HTTPS和BASIC身份驗證
- 15. AngularJS和Firebase身份驗證
- 16. WCF和身份驗證
- 17. 身份驗證和REST
- 18. Cookie和身份驗證-ASP.net
- 19. URLDownloadToFile和身份驗證
- 20. Powershell,svn和身份驗證
- 21. 身份驗證和服務
- 22. Silverlight和ActiveDirectory身份驗證
- 23. MediaWiki和SimpleSAMLPHP身份驗證
- 24. Asp.net和Windows身份驗證
- 25. wcf和windows身份驗證
- 26. IIS 8和身份驗證
- 27. Vaadin身份驗證和Auhorization
- 28. JSP和OAUTH2身份驗證
- 29. Django,cordova和身份驗證
- 30. Janrain和Tomcat身份驗證
工作,謝謝! – user149377