Można to zrobić na różne sposoby, w zależności od tego, jak zbieramy nagłówek Authorization
i czy kod ma obsłużyć wszystko, czy też chcemy, aby użytkownik mógł wprowadzić żądany nagłówek.
Kiedy po raz pierwszy wypróbowałem to, mogłem pokazać tekst nagłówka Authorization
w obszarze pola parametru każdego punktu końcowego, gdzie użytkownik mógł wpisać nagłówek Authorization
, ale nie było to, co chciałem.
W mojej sytuacji musiałem wysłać żądanie do punktu końcowego /token
za pomocą pliku cookie użytkownika, aby uzyskać ważny token Authorization
. Zrobiłem mieszankę rzeczy, aby to osiągnąć.
pierwsze w SwaggerConfig.cs
I Odkomentowano c.BasicAuth()
aby uzyskać podstawowe schematu uwierzytelniania do schematu API i ja również wstrzykiwany niestandardowej index.html
stronę gdzie wstawiony żądania AJAX w celu chwycić Authorization
tokena, za pomocą pliku cookie użytkownika (pokazany kod index.html
poniżej):
public static void Register() {
System.Reflection.Assembly thisAssembly = typeof(SwaggerConfig).Assembly;
System.Web.Http.GlobalConfiguration.Configuration
.EnableSwagger(c => {
...
c.BasicAuth("basic").Description("Bearer Token Authentication");
...
})
.EnableSwaggerUi(c => {
...
c.CustomAsset("index", thisAssembly, "YourNamespace.index.html");
...
});
}
Udaj here aby pobrać swashbuckle index.html
które będziemy dostosowywać do wstawienia Authorization
nagłówek.
Poniżej po prostu wykonać połączenie AJAX do mojego /token
końcowego z ważnego pliku cookie, uzyskać Authorization
tokena, i dać go do puszyć korzystać z window.swaggerUi.api.clientAuthorizations.add()
:
usunąłem kilka rzeczy z AJAX zadzwoń, aby było prostsze i oczywiście Twoja implementacja będzie prawdopodobnie różna w zależności od tego, jak zbierzesz swój token Authorization
, ale to daje ci pomysł. Jeśli masz jakieś konkretne problemy lub pytania, daj mi znać.
* Edycja: Nie zauważyłem, że rzeczywiście chcesz, aby użytkownik wpisał swój nagłówek Authorization
. W takim przypadku jest to bardzo łatwe. Użyłem postu this. Po prostu stworzony następujące klasy do pracy:
public class AddRequiredHeaderParameter : IOperationFilter {
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) {
if (operation.parameters == null) {
operation.parameters = new List<Parameter>();
}
operation.parameters.Add(new Parameter {
name = "Foo-Header",
@in = "header",
type = "string",
required = true
});
}
}
Następnie dodaje klasę do mojego SwaggerConfig
tak:
...
c.OperationFilter<AddRequiredHeaderParameter>();
...
Wygląda na to, że najnowsza wersja Swashbuckle zmieniła klasę Operation, aby usunąć klasę filtru parametru? jakieś pomysły? –
jeśli utworzę ten filtr wszystkie moje akcje o to poproszę? jak mogę wykluczyć działania kontrolera, które tego nie wymagają? –