我使用Swashbuckle来记录WebAPI控制器。我还使用OAuth2和Client Credentials Flow。因此,要授权我需要传递client_id
和client_secret
。
我有以下代码:
config.EnableSwagger(c => {
c.SingleApiVersion("v1", "My API");
c.OAuth2("oauth2")
.Flow("application")
.TokenUrl("/oauth2/token");
c.OperationFilter<AssignOAuthSecurityRequirements>();
})
.EnableSwaggerUi(c => {
c.EnableOAuth2Support(clientId: "clientIdValue", clientSecret:"clientSecretValue", "", "");
c.CustomAsset("index", Assembly.GetExecutingAssembly(), "WebAPI.Swagger.UI.index.html");
});
授权正常但我的client_id
和client_secret
值是硬编码的(clientIdValue,clientSecretValue)。如何在此对话框中添加用户输入值的可能性?任何人都可以帮助我吗?
如果我还需要发布AssignOAuthSecurityRequirements
的代码,请与我们联系。提前全部谢谢
答案 0 :(得分:0)
不确定您的代码到底出了什么问题,可能缺少范围定义。
我已成功使用ASP.NET Core和当前版本的Swashbuckle.AspNetCore(https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
客户端凭据流称为“应用程序”,因此,在Startup.cs文件中,您需要按如下方式配置Swagger:
services.AddSwaggerGen(c => {
//other configs...
c.AddSecurityDefinition("oauth2", new OAuth2Scheme {
Type = "oauth2",
Flow = "application",
TokenUrl = "<token_endpoint_url>",
Scopes = new Dictionary<string, string>
{
{ "first-scope", "First scope description" },
{ "second-scope", "Second scope description" }
//define as many scopes as you want...
}
});
});
TokenUrl参数必须指向有效的OAuth 2.0兼容令牌端点(checkout http://docs.identityserver.io/en/release/endpoints/token.html以获取端点应如何表现/看起来的示例)。绝对和相对URL都在我的测试中起作用。
之后,授权对话框应该如下所示:
SwaggerUI部分不需要其他配置。