«Иногда вам нужен каскадер, прежде чем отправлять реальных, ничего не подозревающих пользователей!»
Упаковка | Версия |
---|---|
RimDev.Каскадер |
Stuntman — это библиотека для олицетворения пользователей во время разработки с использованием .NET Claims Identity. Используется в основном в веб-средах, таких как ASP.NET MVC, веб-формы ASP.NET и приложениях OWIN, обслуживающих HTML. Это позволяет вам с минимальными трудностями тестировать различные пользовательские сценарии, существующие в вашем приложении. Это также позволяет вам делиться этими сценариями с другими членами команды через систему контроля версий.
Установите пакет NuGet RimDev.Stuntman.
PM> Install-Package RimDev.Stuntman
Stuntman использует OWIN, зарегистрирован в качестве промежуточного программного обеспечения и позволяет программно задавать пользовательские сценарии в форме удостоверений утверждений. Эти пресеты могут использоваться вами или другими членами команды, работающими над той же базой кода.
// 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 ) ;
}
}
Вот как можно использовать Stuntman в представлении Razor , чтобы отобразить средство выбора пользователя (при условии, что класс Startup
приложения имеет StuntmanOptions
, которые можно использовать) .
@* Only show when debug is true in Web.config. *@
@if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
@Html.Raw(YourApplicationNamespace.Startup.StuntmanOptions.UserPicker(User));
}
Stuntman поддерживает токены-носители на основе токена доступа пользователя ( StuntmanUser.SetAccessToken
). В этом значении нет ничего особенного, и никакого дополнительного кодирования/декодирования не требуется. После успешной аутентификации значение добавляется в качестве утверждения. Используя предыдущий код Startup
, вы можете создать HTTP-запрос для использования токена доступа пользователя 2:
> curl -i -H " Authorization: Bearer 123 " http://localhost:54917/secure
HTTP/1.1 200 OK
Базовая проверка формата выполняется для значения:
> 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.
Пользователей можно заполнять из удаленных мест, используя один или несколько из следующих способов:
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/" ) ;
Вот пример пользовательского JSON, который может использоваться StuntmanOptions.AddUsersFromJson(string pathOrUrl)
:
{
"Users" : [
{
"Id" : " user-1 " ,
"Name" : " User 1 "
},
{
"Id" : " user-2 " ,
"Name" : " User 2 "
}
]
}
Есть идея? Давайте поговорим об этом в выпуске!
Найти ошибку? Откройте проблему или отправьте запрос на включение!
Лицензия MIT