Victor Gomez de Juan

Desarrollador de software y analista de datos

Clean Architecture con .NET Core, Blazor y Windows Authentication

Blazor como interfaz de usuario

Si has leído los posts anteriores sobre cómo desarrollar una solución software basada en Clean Architecture con .NET Core, habrás visto que, como tecnología para la interfaz de usuario, escogí Razor Pages.

La elección de esta tecnología se debía a mi conocimiento previo con ella y que la aplicación iba a contener pantallas y contenidos muy diferentes. Sin embargo, recientemente nos ha surgido la necesidad de crear una versión web para móviles que tendrá una funcionalidad distinta a la de la aplicación web normal basada en Razor.

Su función será facilitar la realización de consultas y operaciones sencillas para aquellos usuarios que no tengan disponible un PC/portátil en ese momento. Después de darle unas vueltas, vimos que la mejor opción era optar por una SPA (Single Page Application) que facilitara el el uso y optimizara el rendimiento.

De ahí la necesidad de crear un nuevo proyecto en la solución para implementar la aplicación web para su acceso desde móviles.

La solución por el momento, queda así:

Solución Extranet

Application, Domain e Infraestructure son los proyectos de las capas que expliqué en el primer post.

WebAPI es el proyecto que alberga los servicios webs ofrecidos por la extranet.

WebMobileUI es el proyecto Blazor.

WebUI es el proyecto Razor Pages.

Worker es el proyecto que contiene las tareas programadas que se ejecutan como servicio de Windows.

Windows Authentication y la interfaz ICurrentUserService

Si habéis utilizado el mismo esqueleto que yo para implementar vuestra solución Clean Architecture con .NET Core, es decir, la que propone Jason Taylor, en cada proyecto de interfaz o de acceso a la capa de aplicación, habréis tenido que implementar la interfaz ICurrentUserService para que el programa pueda consultar cuál es el usuario actual que esta accediendo al mismo.

Y si habéis integrado estos proyectos con la autenticación de Windows de .NET Core (via Active Directory), seguramente habréis utilizado el servicio IHttpContextAccessor que se incluye en la clase Startup.cs. Nosotros hemos hecho uso de esta herramienta tanto en el proyecto de Razor Pages como en el de la API REST.

IHttpContextAccessor

IHttpContextAccessor2

Pero esta solución no sirve para un proyecto Blazor Server, que es el que nosotros hemos utilizado.  En este caso, hemos implementado la interfaz ICurrentUserService haciendo uso del servicio AuthenticationStateProvider de la siguiente forma:

AuthenticationStateProvider

Y, para obtener el usuario actual dentro de una página blazor (fichero .razor), hemos incluido un CascadingParameter de tipo Task.

AuthenticationState

Con esto cubríriamos las necesidades de autenticación y de seguridad de la solución y permitimos a la capa de aplicación obtener el usuario que está accediendo a la extranet para sus comprobaciones y consultas.

Deja una respuesta

Your email address will not be published. Required fields are marked *.

*
*
You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>