带有 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 - 无法使用令牌访问资源
带有 Spring Boot 的 OAuth2 SSO 没有授权屏幕
带有 OAuth2 令牌的 AFNetworking 2.0