我正在使用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 变量中有访问令牌。 我认为应该在授权标头中自动增值访问令牌吗?步骤是什么?
提前致谢
答案 0 :(得分:0)
试试这个
var accesstoken = await HttpContext.GetTokenAsync(“access_token”);
答案 1 :(得分:0)
我使用客户端凭据流解决了它。