oauth-2.0 - System.IO.IOException:IDX10804:无法从以下位置检索文档:'http://localhost:51156/.well-known/openid-configuration'
问题描述
我已经使用 JwtSecurityToken 生成了一个令牌,但是,当我将它添加到邮递员的请求标头以在我的 api 中调用一个操作时,我遇到了这个异常:
System.IO.IOException:IDX10804:无法从以下位置检索文档:' http://localhost:51156/.well-known/openid-configuration';. ---> System.Net.Http.HttpRequestException:响应状态码不表示成功:404(未找到)。在 System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode() 在 Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.<GetDocumentAsync>d__8.MoveNext() --- 内部异常堆栈跟踪结束 --- 在 Microsoft.IdentityModel.Protocols.HttpDocumentRetriever。 <GetDocumentAsync>d__8.MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()(任务任务) 在 System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult()
 at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.<GetAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult() 在 Microsoft.IdentityModel.Protocols.ConfigurationManager`1.<GetConfigurationAsync>d__24.MoveNext()
这就是我生成令牌的方式:(为了简单起见,我暂时硬编码了一些值,而不是从 appsettings.json 中读取)
[AllowAnonymous]
[HttpPost]
[Route("")]
public IActionResult RequestToken([FromBody] TokenRequest request)
{
if (request.Username == "Jon" && request.Password == "123456")
{
var claims = new[]
{
new Claim(ClaimTypes.Name, request.Username)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_securityConfig.Key));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "http://localhost:51156/",
audience: "http://localhost:51156/",
claims: claims,
expires: DateTime.Now.AddDays(3),
signingCredentials: creds);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
return BadRequest("Could not verify username and password");
}
这就是我的 ConfigureService 方法的方式:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "http://localhost:51156/";
options.Audience = "http://localhost:51156/";
options.RequireHttpsMetadata = false;
});
}
任何建议或指导将不胜感激。
解决方案
推荐阅读
- javascript - 拦截箭头键并发送 Enter 代替
- npm - 私有存储库 GitLab 的版本控制
- php - 如何让我的 apache 网站只接受带有特定条目的主机头
- sql-server - 是否可以生成包含序列化通用(未知)C# 对象的 Kafka 消息,并通过推断消费者中的类型来反序列化它们?
- json - 如何在结构类型的结构中统一变量
- vscode-extensions - 有没有办法使用 Ctrl + Click 来触发命令作为 VS Code 扩展的一部分?
- c# - 在客户端机器上使用 CefSharp 的 Javascript 注册对象问题
- reactjs - 在 ReactJS 中访问完整的日历 API
- javascript - React-Chart.js 图例 onClick 函数
- android - 在我的屏幕录制应用程序中创建文件路径时出错