Saya mengembangkan beberapa Web Api dengan .Net core 3.0 dan ingin mengintegrasikannya dengan SwashBuckle.Swagger. Ini berfungsi dengan baik, tetapi ketika saya menambahkan otentikasi JWT, itu tidak berfungsi seperti yang saya harapkan. Untuk melakukan itu, saya menambahkan kode di bawah ini:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My Web API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey
});
});
Setelah menambahkan AddSecurityDefinition
fungsi, saya dapat melihat tombol Otorisasi dan ketika saya mengkliknya, saya melihat formulir di bawah ini:
Kemudian saya mengetik Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
, Setelah melakukan itu saya berharap melihat authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh
di header permintaan, ketika saya mengirim permintaan ke Web Api dari Swagger. Tetapi otorisasi tidak ditambahkan ke header permintaan. Saya menggunakan SwashBuckle.Swagger (5.0.0-rc3). Harap dicatat ada banyak sampel yang berfungsi dengan baik pada .net core 2.0, tetapi fungsi swashbuckle swagger telah berubah pada versi terbaru sehingga saya tidak dapat menggunakan sampel itu.
sumber
.AddSecurityRequirement
(secara global) atau.Security
(pada tingkat operasi) - sebagaimana dijelaskan dalam jawaban untuk pertanyaan terkait.AddSecurityDefinition
sendiri tidak cukup.Jawaban:
Setelah beberapa penelitian, saya akhirnya menemukan jawabannya di sini
Sebelum melihat halaman ini, saya tahu bahwa saya harus menggunakan
AddSecurityRequirement
setelahAddSecurityDefinition
karena banyak sampel, tetapi itu adalah masalah bahwa parameter fungsi telah berubah pada .NET Core 3.0.Omong-omong, jawaban akhirnya adalah sebagai berikut:
sumber
Jika Anda menggunakan Swagger 3.0 maka ia memiliki dukungan bawaan untuk otentikasi JWT.
Anda perlu menggunakan ParameterLocation.Header, SecuritySchemeType.Http, bearer, dan JWT di OpenApiSecurityScheme seperti yang ditunjukkan di bawah ini.
Setelah ini, Anda tidak perlu menentukan token dalam format Bearer {token} . Hanya tentukan token dan skema keamanan akan secara otomatis menerapkannya di header.
sumber
Jika Anda tidak ingin menambahkan token secara manual dan Anda ingin cakupan dipilih bersamaan dengan mengirimkan clientId ke server identitas Anda dapat menambahkan sesuatu seperti ini.
Saya telah menggunakan aliran implisit, tetapi Anda dapat mengonfigurasi aliran apa pun menggunakan mekanisme berikut:
Outputnya akan seperti ini:
sumber
Berikut solusi yang diperbarui untuk Swashbuckle.AspNetCore 5.3.2, terintegrasi dengan IdentityServer4, dengan API yang diamankan menggunakan token Bearer.
Dalam
ConfigureServices()
metode:Dalam
Configure()
metode:sumber
Jika ada yang menggunakan NSwag dan telah mendarat di sini setelah mencari solusinya, inilah tautan dari dokumentasi resmi.
NSwag Mengaktifkan otentikasi JWT
PS: Saya tahu pertanyaan aslinya adalah untuk SwashBuckle, tetapi Google menunjukkan tautan ini terlebih dahulu ketika mencari NSwag juga.
sumber