"Parfois, vous avez besoin d'un cascadeur avant d'envoyer de vrais utilisateurs sans méfiance !"
Emballer | Version |
---|---|
RimDev.Stuntman |
Stuntman est une bibliothèque permettant de se faire passer pour des utilisateurs pendant le développement en tirant parti de .NET Claims Identity. Utilisé principalement dans les environnements Web tels que ASP.NET MVC, ASP.NET Web Forms et les applications OWIN qui servent HTML. Cela vous permet de tester différents scénarios utilisateur qui existent dans votre application avec un minimum de friction. Il vous permet également de partager ces scénarios avec d'autres membres de l'équipe via le contrôle de code source.
Installez le package NuGet RimDev.Stuntman.
PM> Install-Package RimDev.Stuntman
Stuntman utilise OWIN et est enregistré en tant que middleware, et permet des scénarios utilisateur prédéfinis par programme, sous la forme d'identités de revendications. Ces préréglages peuvent être utilisés par vous ou par d’autres membres de l’équipe travaillant sur la même base de code.
// 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 ) ;
}
}
Voici comment utiliser Stuntman dans une vue Razor pour afficher le sélecteur d'utilisateur (en supposant que la classe Startup
de l'application dispose de StuntmanOptions
qui peuvent être utilisées) .
@* Only show when debug is true in Web.config. *@
@if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
@Html.Raw(YourApplicationNamespace.Startup.StuntmanOptions.UserPicker(User));
}
Stuntman prend en charge les jetons de porteur basés sur le jeton d'accès d'un utilisateur ( StuntmanUser.SetAccessToken
). Il n’y a rien de spécial concernant la valeur et aucun encodage/décodage supplémentaire n’est nécessaire. Une fois l'authentification réussie, la valeur est ajoutée en tant que revendication. En tirant parti du code Startup
précédent, vous pouvez créer une requête HTTP pour utiliser le jeton d'accès de l'utilisateur 2 :
> curl -i -H " Authorization: Bearer 123 " http://localhost:54917/secure
HTTP/1.1 200 OK
La vérification du format de base est effectuée sur la valeur :
> 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.
Les utilisateurs peuvent être renseignés à partir d'emplacements distants à l'aide d'un ou plusieurs des éléments suivants :
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/" ) ;
Voici un exemple d'utilisateur JSON qui peut être consommé par StuntmanOptions.AddUsersFromJson(string pathOrUrl)
:
{
"Users" : [
{
"Id" : " user-1 " ,
"Name" : " User 1 "
},
{
"Id" : " user-2 " ,
"Name" : " User 2 "
}
]
}
Vous avez une idée ? Parlons-en dans un numéro !
Trouver un bug ? Ouvrez un problème ou soumettez une pull request !
Licence MIT