2010-04-21 9 views
16

Estoy tratando de implementar el inicio de sesión de OpenId para una aplicación web. Cada vez que un usuario nuevo inicia sesión a través de OpenId creo un nuevo usuario en el sistema, y ​​entre los datos almaceno su URL openid, para que la próxima vez que inicie sesión con ese usuario.¿Por qué cambia el ID de la implementación de OpenID de Google?

Estoy probando esto con mi Gmail OpenID, y el problema es que cada vez que hago esto, Google envía una URL de OpenID diferente, es decir, https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime

Por supuesto que entonces no soy capaz de decir wheter este es o no un nuevo usuario. Estoy un poco desconcertado: ¿el identificador de apertura no debería ser siempre el mismo?

+4

¡Intente utilizar más signos de interrogación y signos de exclamación!?!? – fig

+2

Normalmente no hago eso, pero estaba realmente desconcertado por este comportamiento. Esperaba que la ventaja de OpenId fuera tener una URL única para identificarse, en lugar de depender de un proveedor que le asignara una por vez. – Andrea

+0

incluso tuve el mismo problema, pero al profundizar descubrí que el dominio en mi caso enviado para la solicitud de autenticación es la misma cadena, todavía da valores diferentes en diferentes navegadores. Lo probé en FF y Chrome. no estoy seguro de lo que me falta aquí. – awake416

Respuesta

19

El identificador de OpenID de Google es más o menos una representación en hash de múltiples datos, incluido el host del que proviene la solicitud (más exactamente el parámetro openid.realm enviado al proveedor). Por lo tanto, si su host cambia ocasionalmente (como el puerto y la dirección IP cambian), la identificación también cambiará de vez en cuando. StackOverflow también utiliza una solución para este problema. Compruebe estos mensajes:

Aquí es un FAQ extracto de Google:

Q: La especificación OpenID dice que el openid.realm es opcional, y que si no provisto, Google debería usar la URL openid.return_to en su lugar. ¿Eso funcionará?

A: Funcionará en el sentido de que el protocolo se completará correctamente. Pero si su URL return_to es algo así como www.example.com/authenticate?style=openid-federated_login, nos está pidiendo que solicitemos a los usuarios que aprueben y confíen en una dirección específica en su sitio, que no es fácil de usar. Además, si omite el parámetro openid.realm, nunca podrá cambiar su URL return_to: también cambiará implícitamente el dominio y los identificadores de URL de los usuarios de su cuenta de Google.

+0

Solo estoy haciendo dos autenticaciones del mismo host (local), a unos segundos de distancia, una de la otra. Así que supongo que nada está cambiando; sin embargo, obtengo diferentes identidades (openid.identity). – Andrea

+0

registre la comunicación entre su aplicación y google. Los principales marcos oíd apoyan esto. Compruebe si la solicitud es la misma para sus consultas o no. – SztupY

+0

SztupY: "incluido el host del que proviene la solicitud" no es estrictamente cierto. La variable aquí es el parámetro openid.realm, que no está vinculado al origen de la solicitud, sino a dónde se enviará la respuesta (lo que puede ser algo muy diferente, pero a menudo es lo mismo). –

Cuestiones relacionadas