带有 OAuth2 的 Swashbuckle.AspNetCore v1.0.0,流程:应用程序 -> IdentityServer4

Posted

技术标签:

【中文标题】带有 OAuth2 的 Swashbuckle.AspNetCore v1.0.0,流程:应用程序 -> IdentityServer4【英文标题】:Swashbuckle.AspNetCore v1.0.0 with OAuth2, flow : application -> IdentityServer4 【发布时间】:2017-09-28 23:12:45 【问题描述】:

我似乎无法让我的 .net 核心 Web API 与 swashbuckle、OAuth2 和应用程序流一起使用。当我单击 Authorize 按钮时,Fiddler 显示调用正常,并且我的本地 IdentityServer(4) 以 access_token 回复。这一切都很好,但我不认为 Swagger 能解决这个问题,没有任何事情发生,我无法在没有 401 的情况下触发我的控制器方法。我看不到任何 cookie,什么也没有。我确定我错过了一些非常微不足道的东西。有人可以帮我吗?

相关代码:

Startup.cs 中的配置服务

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)。

【问题讨论】:

使用 Postman 测试 API 时是否传递了 access_token?如果是,如何?我会在此基础上给出解决方案。 我愿意,我在标头中传递了令牌(键:授权,值:承载 token)。 【参考方案1】:

对于当前项目,我们有一个非常相似的设置。我们的 rest api 使用 jwt 不记名身份验证和 azure ad b2c 保护。在这种情况下,没有办法大摇大摆地自动拿起令牌。

这个解决方案非常适合我们:https://***.com/a/39759152/536196

services.AddSwaggerGen(c =>

    c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
);

之后,当您运行 Swagger UI 时,您应该会看到令牌的附加字段。

【讨论】:

我是怎么发现的,没有办法招摇自动接,我见过一些应用程序有Authorize按钮,也是这样

以上是关于带有 OAuth2 的 Swashbuckle.AspNetCore v1.0.0,流程:应用程序 -> IdentityServer4的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Boot REST 应用程序的 OAuth2 - 无法使用令牌访问资源

使用带有oauth2的Spring启动但面临一些问题

带有 Spring Boot 的 OAuth2 SSO 没有授权屏幕

带有 OAuth2 令牌的 AFNetworking 2.0

带有 OAuth2FeignRequestInterceptor 的 Spring @FeignClient 不起作用

带有刷新令牌的 Spring Google OAuth2