net mvc form example crear asp asp.net-mvc oauth asp.net-web-api openid dotnetopenauth

asp.net mvc - mvc - DotNetOpenAuth OpenID Flow con servidor de autenticación propio



security asp net mvc (1)

Solo para completar, pensé que actualizaría esta pregunta con mi respuesta.

Lo que terminé haciendo fue mover los puntos finales Authorize y Token a mi aplicación MVC 4 en lugar de tenerlos dentro de la misma API.

De esta forma, cuando se llama al punto de acceso Authorize con un usuario conectado (por lo tanto, con una cookie ASP.NET FormsAuthentication presente), es posible obtener un código de autorización que se concede cuando el procesamiento de la solicitud golpea este código:

// Consider auto-approving if safe to do so. if (((OAuth2AuthorizationServer)this.authorizationServer.AuthorizationServerServices).CanBeAutoApproved(pendingRequest)) { var approval = this.authorizationServer.PrepareApproveAuthorizationRequest(pendingRequest, HttpContext.User.Identity.Name); return this.authorizationServer.Channel.PrepareResponse(approval).AsActionResult(); }

Una vez que tiene un código de autorización, puede llamar al punto final Token usando una instancia de WebServerClient y llamando a su método RequestUserAuthorization .

Cuando esto vuelva a llamar, puede llamar al método ProcessUserAuthorization , que devolverá un objeto IAuthorizationState con su token de acceso y token de actualización.

Tengo muchas dificultades para encontrar respuestas a un escenario que tengo que implementar usando DotNetOpenAuth y un flujo particular con el que tengo que lidiar.

En el siguiente gráfico, tengo el control tanto del sitio de MVC como de la API. La API es mi servidor de autorización y mi servidor de recursos.

Nombre de usuario y flujo de contraseña

El proceso es bastante obvio en un caso en el que el usuario ha creado una cuenta local en mi sistema ya que estoy tratando con credenciales de nombre de usuario y contraseña para iniciar sesión en el sitio que luego puedo pasar a mi punto final Token y pasarlo a la HandleTokenRequest de mi servidor de autorización para obtener tokens de acceso y tokens de actualización para que mi cliente pueda comenzar a acceder a los recursos.

Flujo de OpenID

El flujo con el que estoy perdido actualmente es si un usuario decide iniciar sesión en mi sitio usando sus credenciales de Google (por ejemplo). En este escenario, ¿cómo les otorgo tokens de acceso y tokens de actualización desde mi propio servidor de autorización en mi API?

¿Qué incluiría en la solicitud a mi punto final Token API?

DotNetOpenAuth mi propio cliente API que hereda de la clase WebServerClient que es parte de la biblioteca DotNetOpenAuth .

He visto que hay una interfaz para manipular tokens llamada IServiceProviderTokenManager pero parece que se usa en escenarios de proveedores OpenID y no en una implementación de cliente API como la mía, por lo que supongo que debo escribir una clase personalizada para almacenar y recuperar mis propios tokens de API en el lado del cliente, pero me gustaría que también se confirme?

Vale la pena mencionar que tanto el sitio web como la API tienen acceso completo a la misma base de datos de seguridad, pero solo la API tiene acceso a la base de datos donde se guardan los recursos.