Hiện tại Swagger có chức năng xác thực với JWT-token và có thể tự động thêm mã thông báo vào tiêu đề (Tôi đang sử dụng Swashbuckle.AspNetCore 1.1.0).
Mã sau đây sẽ giúp đạt được điều này.
Trong Startup.ConfigureServices():
services.AddSwaggerGen(c =>
{
// Your custom configuration
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
c.DescribeAllEnumsAsStrings();
// JWT-token authentication by password
c.AddSecurityDefinition("oauth2", new OAuth2Scheme
{
Type = "oauth2",
Flow = "password",
TokenUrl = Path.Combine(HostingEnvironment.WebRootPath, "/token"),
// Optional scopes
//Scopes = new Dictionary<string, string>
//{
// { "api-name", "my api" },
//}
});
});
Kiểm tra và cấu hình TokenUrl nếu thiết bị đầu cuối của bạn là khác nhau.
Trong Startup.Configure():
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "API V1");
// Provide client ID, client secret, realm and application name (if need)
c.ConfigureOAuth2("swagger-ui", "swagger-ui-secret", "swagger-ui-realm", "Swagger UI");
});
Nếu thiết bị đầu cuối của bạn để xác thực bằng thẻ theo tiêu chuẩn OAuth2, tất cả phải làm việc. Nhưng chỉ trong trường hợp, tôi đã thêm mẫu của điểm cuối này:
public class AccountController : Controller
{
[ProducesResponseType(typeof(AccessTokens), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
[HttpPost("/token")]
public async Task<IActionResult> Token([FromForm] LoginModel loginModel)
{
switch (loginModel.grant_type)
{
case "password":
var accessTokens = // Authentication logic
if (accessTokens == null)
return BadRequest("Invalid user name or password.");
return new ObjectResult(accessTokens);
case "refresh_token":
var accessTokens = // Refresh token logic
if (accessTokens == null)
return Unauthorized();
return new ObjectResult(accessTokens);
default:
return BadRequest("Unsupported grant type");
}
}
}
public class LoginModel
{
[Required]
public string grant_type { get; set; }
public string username { get; set; }
public string password { get; set; }
public string refresh_token { get; set; }
// Optional
//public string scope { get; set; }
}
public class AccessTokens
{
public string access_token { get; set; }
public string refresh_token { get; set; }
public string token_type { get; set; }
public int expires_in { get; set; }
}
nơi bạn lấy mã thông báo mang để đưa vào trường jwttoken khi sử dụng chức năng thử trong ui vênh? – emseetea
Chỉ cần trợ giúp nhanh; sử dụng Microsoft.AspNetCore.Mvc.Authorization; sử dụng Swashbuckle.AspNetCore.Swagger; sử dụng Swashbuckle.AspNetCore.SwaggerGen; bằng System.Collections.Generic; bằng System.Linq; – statler