"¡A veces necesitas un especialista antes de enviar usuarios reales e incautos!"
Paquete | Versión |
---|---|
RimDev.Stuntman |
Stuntman es una biblioteca para hacerse pasar por usuarios durante el desarrollo aprovechando .NET Claims Identity. Se utiliza principalmente en entornos web como ASP.NET MVC, ASP.NET Web Forms y aplicaciones OWIN que sirven HTML. Esto le permite probar diferentes escenarios de usuario que existen en su aplicación con una fricción mínima. También le permite compartir esos escenarios con otros miembros del equipo a través del control de fuente.
Instale el paquete NuGet RimDev.Stuntman.
PM> Install-Package RimDev.Stuntman
Stuntman usa OWIN y está registrado como middleware, y permite escenarios de usuario preestablecidos mediante programación, en forma de identidades de reclamo. Estos ajustes preestablecidos pueden ser utilizados por usted u otros miembros del equipo que trabajen en la misma base de código.
// OWIN Startup class
public class Startup
{
public static readonly StuntmanOptions StuntmanOptions = new StuntmanOptions ( ) ;
public void Configuration ( IAppBuilder app )
{
StuntmanOptions
. AddUser ( new StuntmanUser ( "user-1" , "User 1" )
. AddClaim ( "given_name" , "John" )
. AddClaim ( "family_name" , "Doe" ) ) ;
// Optionally assign a user an access token.
StuntmanOptions
. AddUser ( new StuntmanUser ( "user-2" , "User 2" )
. SetAccessToken ( "123" )
. AddClaim ( "given_name" , "Mary" )
. AddClaim ( "family_name" , "Smith" ) ) ;
// You can also add users using HTTP/HTTPS or the file system!
StuntmanOptions
. AddUsersFromJson ( "https://example.com/web-test-users.json" )
. AddUsersFromJson ( @"C:local-test-users.json" ) ;
// Optional alignment of user picker
// Supported options are:
// - StuntmanAlignment.Left (default)
// - StuntmanAlignment.Center
// - StuntmanAlignment.Right
StuntmanOptions . SetUserPickerAlignment ( StuntmanAlignment . Right ) ;
// Only show when debug is true in Web.config.
if ( System . Web . HttpContext . Current . IsDebuggingEnabled )
{
app . UseStuntman ( StuntmanOptions ) ;
}
}
}
// ASP.NET Core
public class Startup
{
public static readonly StuntmanOptions StuntmanOptions = new StuntmanOptions ( ) ;
public Startup ( IConfiguration configuration )
{
StuntmanOptions
. AddUser ( new StuntmanUser ( "user-1" , "User 1" )
. AddClaim ( "given_name" , "John" )
. AddClaim ( "family_name" , "Doe" ) ) ;
Configuration = configuration ;
}
public IConfiguration Configuration { get ; }
public void ConfigureServices ( IServiceCollection services )
{
services . AddStuntman ( StuntmanOptions ) ;
}
public void Configure ( IApplicationBuilder app , IHostingEnvironment env )
{
app . UseStuntman ( StuntmanOptions ) ;
}
}
A continuación se explica cómo usar Stuntman en una vista Razor para mostrar el selector de usuario (suponiendo que la clase Startup
de la aplicación tenga StuntmanOptions
que se puedan usar) .
@* Only show when debug is true in Web.config. *@
@if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
@Html.Raw(YourApplicationNamespace.Startup.StuntmanOptions.UserPicker(User));
}
Stuntman admite tokens de portador basados en el token de acceso de un usuario ( StuntmanUser.SetAccessToken
). No hay nada especial en el valor y no es necesaria ninguna codificación/decodificación adicional. Tras una autenticación exitosa, el valor se agrega como reclamo. Aprovechando el código Startup
anterior, puede crear una solicitud HTTP para utilizar el token de acceso del Usuario 2:
> curl -i -H " Authorization: Bearer 123 " http://localhost:54917/secure
HTTP/1.1 200 OK
La verificación de formato básica se realiza en el valor:
> curl -i -H " Authorization: Bearer not-real " http://localhost:54917/secure
HTTP/1.1 403 options provided does not include the requested ' not-real ' user.
> curl -i -H " Authorization: Bearer abc 123 " http://localhost:54917/secure
HTTP/1.1 400 Authorization header is not in correct format.
Los usuarios pueden ser poblados desde ubicaciones remotas usando uno o más de los siguientes:
StuntmanOptions . AddUsersFromJson ( "C: \ path \ to \ users.json" ) ;
StuntmanOptions . AddUsersFromJson ( "https://example.com/users.json" ) ;
//
// On the server
//
StuntmanOptions . EnableServer ( ) ;
//
// On the client
//
StuntmanOptions . AddConfigurationFromServer ( "https://some-stuntman-enabled-app.example.com/" ) ;
// or, if you prefer to not throw an exception
// and have the users silently not added
// if the server is unavailable:
StuntmanOptions . TryAddConfigurationFromServer ( "https://some-stuntman-enabled-app.example.com/" ) ;
Aquí hay un ejemplo de JSON de usuarios que StuntmanOptions.AddUsersFromJson(string pathOrUrl)
puede consumir:
{
"Users" : [
{
"Id" : " user-1 " ,
"Name" : " User 1 "
},
{
"Id" : " user-2 " ,
"Name" : " User 2 "
}
]
}
¿Tienes una idea? ¡Hablemos de ello en un número!
¿Encontrar un error? ¡Abra una incidencia o envíe una solicitud de extracción!
Licencia MIT