【发布时间】:2018-01-09 04:22:50
【问题描述】:
我正在使用 IdentityServer4、一个受保护的 Web 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 页面中的 authorize 按钮时,我重定向到 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 变量中有访问令牌。 我认为它应该自动评估授权标头中的访问令牌吗?步骤是什么?
提前致谢
【问题讨论】:
-
您使用的是 IdentityServer4 1.x 还是 2.x?
-
@aaronR IdentityServer4 在 .net core 2.0 中,我的 api 在 .net core 1.1 中
标签: identityserver4 asp.net-core-webapi swashbuckle