Momentan hat Swagger Funktionalität für die Authentifizierung mit JWT-Token und kann automatisch Token in den Header hinzufügen (ich benutze Swashbuckle.AspNetCore 1.1.0).
Der folgende Code sollte dazu beitragen.
In der 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" },
//}
});
});
überprüfen und konfiguriert TokenUrl wenn Ihr Endpunkt unterschiedlich ist.
Im 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");
});
Wenn Ihr Endpunkt für die Authentifizierung durch Token, um den Standard OAuth2 folgt, sollte funktionieren. Aber nur für den Fall habe ich Probe dieses Endpunkt hinzugefügt:
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; }
}
, wo Sie die Inhaber Token erhalte in das jwttoken Feld zu setzen, wenn die Funktionalität in ui Prahlerei mit ausprobieren? – emseetea
Nur ein schneller Helfer; mit Microsoft.AspNetCore.Mvc.Authorization; mit Swashbuckle.AspNetCore.Swagger; mit Swashbuckle.AspNetCore.SwaggerGen; mit System.Collections.Generic; mit System.Linq; – statler