Swashbuckle.AspNetCore v1.0.0 with OAuth2,flow:application - > IdentityServer4

时间:2017-05-01 14:29:19

标签: c# .net-core identityserver4 swashbuckle

我似乎无法使我的.net核心Web API与swashbuckle,OAuth2一起使用应用程序流。当我单击“授权”按钮时,Fiddler显示调用正常,我的本地IdentityServer(4)回复了access_token。这一切都很棒,除了我不认为Swagger选择了这一点,没有任何事情发生,我无法触发我的控制器方法而没有获得401.我看不到饼干,没有。我确定我错过了一些超级微不足道的东西。有人可以帮我吗?

相关代码:

Startup.cs中的ConfigureServices

c.AddSecurityDefinition("oauth2", new OAuth2Scheme
{                    
    Type = "oauth2",
    Flow = "application",                      
    TokenUrl = "http://localhost:61798/connect/token",
    Scopes = new Dictionary<string, string>
    {
        { "readAccess", "Access read operations" },
        { "writeAccess", "Access write operations" }
    }
});

在Startup.cs中配置

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "http://localhost:61798",
    RequireHttpsMetadata = false,
    ApiName = "api1",
    AutomaticAuthenticate = true, //Doesn't change anything...
});

....

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
    c.ConfigureOAuth2("Swagger", "swaggersecret", "swaggerrealm", "Swagger UI");                
});

我的IdentityServer配置正常。我可以在Postman和一个简单的客户端中调用此API而没有任何问题。我唯一的问题是Swagger(Swashbuckle.AspNetCore 1.0.0)。

1 个答案:

答案 0 :(得分:1)

我们对当前项目的设置非常相似。我们的休息api通过jwt承载认证和azure ad b2c保护。在这种情况下,没有办法自动获取令牌。

此解决方案非常适合我们:https://stackoverflow.com/a/39759152/536196

services.AddSwaggerGen(c =>
{
    c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
});

之后,当您运行swagger UI时,您应该看到令牌的其他字段。