Estoy implementando el servidor de autorización/recursos OAuth2 basado en DotNetOpenAuth. Mi servidor emitirá tokens de acceso con un tiempo de vida muy largo. Estos tokens se usarán desde dispositivos iOS. El flujo, de la forma en que lo veo, es así: 1) se le pide al usuario que ingrese su nombre de usuario/contraseña en el dispositivo iOS 2) se le solicita y almacena un token de acceso con credenciales de contraseña del propietario del recurso 3) en el dispositivo iOS para uso futuro.Cómo forzar el vencimiento del token de acceso OAuth2 con DotNetOpenAuth
De vez en cuando, los usuarios se deshabilitan. Me gustaría revocar el token al mismo tiempo. ¿Cómo hago esto? I sospecho que necesito usar el método ICryptoKeyStore.RemoveKey
para eso, pero no estoy seguro de cómo encontrar qué tecla eliminar.
Nota 1: en el futuro, el servidor será utilizado por aplicaciones web de terceros.
Nota 2: el requisito de tener credenciales de Tipo de licencia de propietario de recurso proviene del hecho de que se decidió que no vale la pena implementar la redirección del navegador en el dispositivo iOS.
Actualización 1 Algunas excavaciones en el código fuente sugieren que DotNetOpenAuth no admite esta capacidad de forzar la expiración símbolo fuera de la caja. Además, en la vida de implementación estándar del token ni siquiera está marcado. Por lo que puedo ver, el calss es responsable de esto es StandardAccessTokenAnalyzer
e ignora las propiedades Lifetime
y UtcCreationDate
. Tampoco parece que la clase estándar ResourceServer
tenga ningún acceso a la base de datos codificado, la validez del token se verifica solo con el contenido del token, por lo que parece que si necesito agregar la capacidad para caducar los tokens necesito cablear el ResourseServer
a la base de datos yo mismo . ¿Me estoy perdiendo de algo?
Actualización 2 Creo que he encontrado la respuesta aquí: https://groups.google.com/forum/#!topic/dotnetopenid/aLabu1ujkt4 No es lo que estaba esperando y todavía tengo un par de falta de claridad. Por ejemplo, Andrew escribió:
la clase personalizada, podría realizar un token de acceso, a continuación, utilizar una solicitud HTTP privada al servidor de autorización para verificar la continua validez del token.
No está claro cómo esta verificación puede suceder, ya que no incluye AccessToken
ID de autorización. Esto puede dificultar la búsqueda del registro de Autorización de destino. En teoría, podemos tratar de buscarlo combinando el cliente, el usuario y el tiempo de emisión, pero, por lo que puedo ver, no hay garantía de que sean únicos.
Andrew, gracias por tomarse su tiempo para responder. Todavía estoy trabajando en este problema y absorberé tu respuesta muy pronto y responderé correctamente. Ahora me gustaría comentar sobre * DotNetOpenAuth comprueba y rechaza los tokens de acceso caducados. Simplemente no está en esa clase. Está marcado en el código que deserializa los tokens de acceso. * Por supuesto que tienes razón, ya he descubierto esto =) No sabía esto al momento de escribir, lo siento. –
* El usuario probablemente ya haya iniciado sesión en su servidor en el navegador del dispositivo * Por el momento no hay una aplicación web para iniciar sesión. Entonces esto no es así. Por supuesto que podría hacer una página de inicio de sesión solo por el hecho de apoyar el flujo, pero como yo no soy el que programa los dispositivos iOS, la decisión compartida fue usar el flujo ROPC. Una de las razones por las cuales fue que no queremos que la aplicación vaya a Safari y luego a la aplicación cada vez que se necesita renovar un token. Eso probará una experiencia de usuario no óptima. –
* Por cierto, es probable que el tipo de concesión de contraseñas del propietario del recurso no sea compatible con clientes que no se autentican (TBD) *. Esta es una información muy interesante. ¿Podrías por favor expandirte? Creo que lo que dices es ilógico, porque una aplicación nativa simplemente * no puede * garantizar la seguridad confidencial de la contraseña del cliente, por lo que TIENE que ser un cliente público. Y dado que la interacción del navegador en una aplicación nativa es engorrosa y difícil, entonces el único tipo de concesión viable es ROPC. Hacer que no esté disponible como parte de la especificación parece ser contraproducente. –