首页 > 解决方案 > 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.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult()&#xD;&#xA; at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.&lt;GetAsync&gt;d__3.MoveNext()&#xD;&#xA;--- End of stack trace from previous location where exception was thrown ---&#xD;&#xA; at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()&#xD;&#xA; at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;&#xA; at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.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;
            });
    }

任何建议或指导将不胜感激。

标签: oauth-2.0.net-corejwtasp.net-core-webapi

解决方案


推荐阅读