2017-03-02 415 views
5

我用Swashbuckle到的WebAPI控制器的文档。我还使用OAuth2和客户端凭证流程。所以授权我需要通过client_idclient_secretSwashbuckle OAuth2用户授权使用客户端凭证流

我有下面的代码:

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_idclient_secret值是硬编码(clientIdValue,clientSecretValue)。如何增加用户在此对话框中输入该值的可能性?谁能帮我?

enter image description here

请让我知道如果我需要张贴的AssignOAuthSecurityRequirements代码了。感谢所有提前

+0

你解决这个吗?我正在寻找相同问题的解决方案。 – jks

+0

同上,我也很好奇我怎样才能获得一个消费者可以输入他们的client_id和client_secret进行验证的对话框。这是可能的大招吗? – Zoop

回答

0

不知道到底出了什么错在你的代码,也许缺少的范围定义。

我和ASP.NET的核心和当前版本Swashbuckle.AspNetCore的(https://github.com/domaindrivendev/Swashbuckle.AspNetCore)成功地做到了

凭证流被称为“应用程序”的客户端,这样,在你Startup.cs文件,您需要配置扬鞭如下:

 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兼容令牌端点(结账http://docs.identityserver.io/en/release/endpoints/token.html用于终端该如何做/看起来像一个样品)。我的测试中都使用了绝对网址和相对网址。

之后,授权对话框应该像波纹管:

Authorize popup

  • 请注意,您必须至少选择一个范围内授权按钮实际上提交任何东西(的OAuth的应该组件之前,被改为添加免责声明恕我直言)。

任何其他配置被要求在SwaggerUI部分。