Erros com Python-Openid e Google Apps Federated Login
-
23-09-2019 - |
Pergunta
ATUALIZAR
Consegui fazê-lo funcionar, embora não tenha certeza do porquê;) parece que o Python-Openid usa uma solicitação pós-emitir para emitir o modo openID = associado e, por algum motivo, o Google não gosta disso. Quando corrigi o Python-openid para usar uma solicitação de get-get, tudo funcionou bem. Continuarei minha investigação e atualizarei esta postagem quando tiver mais informações. Abaixo está o diferencial para minha mudança.
--- python-openid-2.2.1.orig/openid/consumer/consumer.py +++ python-openid-2.2.1/openid/consumer/consumer.py @@ -229,6 +229,20 @@ # Process response in separate function that can be shared by async code. return _httpResponseToMessage(resp, server_url) +def makeKVGet(request_message, server_url): + """Make a Direct Request to an OpenID Provider and return the + result as a Message object. + + @raises openid.fetchers.HTTPFetchingError: if an error is + encountered in making the HTTP post. + + @rtype: L{openid.message.Message} + """ + # XXX: TESTME + resp = fetchers.fetch(request_message.toURL(server_url)) + + # Process response in separate function that can be shared by async code. + return _httpResponseToMessage(resp, server_url) def _httpResponseToMessage(response, server_url): """Adapt a POST response to a Message. @@ -682,6 +696,7 @@ return True _makeKVPost = staticmethod(makeKVPost) + _makeKVGet = staticmethod(makeKVGet) def _checkSetupNeeded(self, message): """Check an id_res message to see if it is a @@ -1258,7 +1273,7 @@ endpoint, assoc_type, session_type) try: - response = self._makeKVPost(args, endpoint.server_url) + response = self._makeKVGet(args, endpoint.server_url) except fetchers.HTTPFetchingError, why: oidutil.log('openid.associate request failed: %s' % (why[0],)) return None
Pergunta antiga, preservada para o contexto
Eu tenho tentado desesperadamente obter o trac-autropenídeo plugin para trabalhar, mas sem sorte.
Usamos o Google Apps Premier no trabalho, por isso estou tentando fazer com que o OpenID Auth trabalhando com isso. Acho que configurei todas as coisas necessárias (XRDs e outras) no que diz respeito ao Google e eu fiz funcionar bem com o Apache2 + mod-auth-openid além de usá -lo em outros sites (por exemplo).
Mas não consigo fazer com que funcione com o Trac-autropenid. Sou redirecionado (por meio de uma postagem de formulário, não um redirecionamento como de costume) para o Google, onde posso fazer login, mas quando devolvo o plug -in, simplesmente afirma que a validação falhou.
Se eu ligar o Logging de depuração, recebo isso (substituí nosso nome de domínio por exemplo.com)
2010-01-27 12:21:15,811 Trac[authopenid] DEBUG: beginning OpenID authentication.
2010-01-27 12:21:16,866 Trac[authopenid] DEBUG: kvToSeq warning: Line 1 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n
2010-01-27 12:21:16,866 Trac[authopenid] DEBUG: kvToSeq warning: Line 2 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n
2010-01-27 12:21:16,866 Trac[authopenid] DEBUG: kvToSeq warning: Line 3 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n
... snipped, repeats until line 9...
2010-01-27 12:21:16,867 Trac[authopenid] DEBUG: openid.associate request failed: bad status code from server https://www.google.com/a/example.com/o8/ud?be=
2010-01-27 12:21:16,868 Trac[authopenid] DEBUG: _get_trust_root href: /trac
2010-01-27 12:21:16,868 Trac[authopenid] DEBUG: _get_trust_root abs_href: https://developer.example.com/trac
2010-01-27 12:21:16,868 Trac[authopenid] DEBUG: _get_trust_root href: /trac
2010-01-27 12:21:16,868 Trac[authopenid] DEBUG: _get_trust_root abs_href: https://developer.example.com/trac
2010-01-27 12:21:16,869 Trac[authopenid] DEBUG: Generated checkid_setup request to https://www.google.com/a/example.com/o8/ud?be=o8 using stateless mode.
2010-01-27 12:21:18,068 Trac[main] DEBUG: Dispatching <Request "GET u'/openidprocess'">
2010-01-27 12:21:18,075 Trac[session] DEBUG: Retrieving session for ID '25a842642693232301aad341'
2010-01-27 12:21:18,078 Trac[authopenid] DEBUG: Error attempting to use stored discovery information: <openid.consumer.consumer.TypeURIMismatch: Required ty
2010-01-27 12:21:18,078 Trac[authopenid] DEBUG: Attempting discovery to verify endpoint
2010-01-27 12:21:18,078 Trac[authopenid] DEBUG: Performing discovery on http://example.com/openid?id=113663311178245814720
2010-01-27 12:21:18,121 Trac[authopenid] DEBUG: Received id_res response from https://www.google.com/a/example.com/o8/ud?be=o8 using association AOQobUefon
2010-01-27 12:21:18,121 Trac[authopenid] DEBUG: Using OpenID check_authentication
2010-01-27 12:21:18,121 Trac[authopenid] DEBUG: op_endpoint
2010-01-27 12:21:18,121 Trac[authopenid] DEBUG: claimed_id
2010-01-27 12:21:18,121 Trac[authopenid] DEBUG: identity
2010-01-27 12:21:18,122 Trac[authopenid] DEBUG: return_to
2010-01-27 12:21:18,122 Trac[authopenid] DEBUG: response_nonce
2010-01-27 12:21:18,122 Trac[authopenid] DEBUG: assoc_handle
2010-01-27 12:21:18,576 Trac[authopenid] DEBUG: kvToSeq warning: Line 1 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n
2010-01-27 12:21:18,577 Trac[authopenid] DEBUG: kvToSeq warning: Line 2 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n
2010-01-27 12:21:18,577 Trac[authopenid] DEBUG: kvToSeq warning: Line 3 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n
... snipped, repeats until line 9...
2010-01-27 12:21:18,578 Trac[authopenid] DEBUG: check_authentication failed: bad status code from server https://www.google.com/a/example.com/o8/ud?be=o8: 501
Eu tentei escrever algum código diretamente contra o python-openid Biblioteca para reduzi -la um pouco, mas eu não tenho noção. Consegui reproduzir o erro com este snippet de código:
from openid.store.memstore import MemoryStore
from openid.consumer import consumer
session = { 'id' : 'foobar' }
store = MemoryStore()
consumer = consumer.Consumer(session, store)
consumer.begin('https://www.google.com/accounts/o8/site-xrds?hd=example.com')
Que produzem consistentemente
kvToSeq warning: Line 1 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Not Implemented</H1>\n<H2>Error 501</H2>\n</BODY>\n</HTML>\n'
kvToSeq warning: Line 2 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Not Implemented</H1>\n<H2>Error 501</H2>\n</BODY>\n</HTML>\n'
kvToSeq warning: Line 3 does not contain a colon: '<HTML>\n<HEAD>\n<TITLE>Not Implemented</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Not Implemented</H1>\n<H2>Error 501</H2>\n</BODY>\n</HTML>\n'
... snip ...
openid.associate request failed: bad status code from server https://www.google.com/a/example.com/o8/ud?be=o8: 501
Alguns números de versão:
Python 2.6.2
trac-authopenid 0.1.6
python-openid 2.2.1
Estou com uma perda completa e poderia realmente usar alguma ajuda.
Solução
OK. Não tenho uma conta de aplicativos, por isso não posso testar o login, mas posso associar com sucesso a um domínio de aplicativos com o python-openid 2.2.4. Aqui está uma pequena ferramenta de depuração para fazer solicitações de associação: http://gist.github.com/288560
Seu patch não deveria ter corrigido coisas; solicitações associadas são sempre postagens. E a Biblioteca Ruby também sempre posta, portanto, a menos que o RPXNOW tenha feito algumas modificações incomuns, o RPXNOW não deve funcionar quando o python-openid falhar aqui.
Eu estava prestes a perguntar sobre o openid.store
Em sua instalação, mas se o seu exemplo mínimo com o MemoryStore reproduzirá, não é isso.
Acho que a única coisa que resta para você é sugerir que você solicite suporte ao suporte ao cliente do Google Apps.
Outras dicas
Você mencionou que está usando Python 2.6.2 com python-openid. A seção de requisitos do arquivo ReadMe atualmente Liste apenas o Python 2.3, 2.4 ou 2.5. É bom saber que você conseguiu funcionar.