如何访问Swashbuckle.AspNetCore保护的api来测试自动文档?

时间:2018-01-07 13:57:46

标签: identityserver4 asp.net-core-webapi swashbuckle

我正在使用IdentityServer4,受保护的网络API和消费者(用于测试的控制台应用程序)开发解决方案。

我使用Swashbuckle.AspNetCore包自动记录我的web api。

在web api中的 ConfigureServices 方法中,我编写了以下代码:

services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "API v1", Version = "v1" });
            c.SwaggerDoc("v2", new Info { Title = "API v2", Version = "v2" });
            c.AddSecurityDefinition("oauth2", new OAuth2Scheme()
            {
                AuthorizationUrl = "http://localhost:5000/connect/authorize",
                Flow = "accessCode",
                TokenUrl = "http://localhost:5000/connect/token",
                Scopes = new Dictionary<string, string> { { "api1", "My API" } }
            });
            c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();            
        });

当我在Swagger.UI页面中单击授权按钮时,我重定向到IdentityServer,在这里我输入用户凭据并且它可以正常工作。 所以现在我必须输入访问令牌(在Swagger.UI页面中)来访问我的受保护端点以查看文档:

[ApiExplorerSettings(GroupName = "v2")]
public class ValuesController : Controller
{
    [HttpGet("[controller]")]
    [Authorize]
    public async Task<IEnumerable<string>> GetAsync()
    {
        var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");
        return new string[] { "value1", "value2" };
    }
}

但是保存了访问令牌的位置?如果我调用我的api并且我放了一个断点,我在 accessToken 变量中有访问令牌。 我认为应该在授权标头中自动增值访问令牌吗?步骤是什么?

提前致谢

2 个答案:

答案 0 :(得分:0)

试试这个

  

var accesstoken = await HttpContext.GetTokenAsync(“access_token”);

答案 1 :(得分:0)

我使用客户端凭据流解决了它。