【问题标题】:A string reference error in services configuration of JWTJWT 服务配置中的字符串引用错误
【发布时间】:2021-06-01 23:26:12
【问题描述】:

编辑:

于是我调试了我的代码,发现问题开始是因为这条线

var key = Environment.GetEnvironmentVariable("KEY");

在我的 ServiceExtentions 中返回一个 null,基本上我从 cmd 添加的 KEY 不起作用。知道为什么吗?

我正在尝试配置 JWT 以在登录时获取令牌,但我收到下图中的错误

Error

AuthConfiguration 1

AuthConfiguration 2

appsettings.json

startup.cs 1

startup 2

ServiceExtensions

我以管理员身份在 cmd 中添加了密钥:

C:\Windows\system32>setx KEY "ffc632ce-0053-4bab-93a4d14aaad" /M

这是我的登录控制器的代码

    public async Task<IActionResult> Login([FromBody] LoginUserDTO userDTO)
    {
        _logger.LogInformation($"Login Attempt for {userDTO.Email} ");
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        try
        {
            if (!await _authManager.ValidateUser(userDTO))
            {
                return Unauthorized();
            }

            return Accepted(new { Token = await _authManager.CreateToken() });
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"Something Went Wrong in the {nameof(Login)}");
            return Problem($"Something Went Wrong in the {nameof(Login)}", statusCode: 500);
        }
    }
}

最后我在 json 中添加了什么

  "Jwt": {
    "Issuer": "HotelListingAPI",
    "lifetime": 15
  },

编辑 2:

我通过在 appsettings.json 文件中静态添加密钥解决了我的问题

【问题讨论】:

  • jwtSetting 或 key 变量没有被获取,我认为它是空的。你的配置文件中 KEY 的值是多少?
  • 你应该将你的配置文件(或者至少是你在这段代码中获取数据的部分)添加到问题中
  • 我将在我的配置文件中添加一个图像引用
  • 能否调试您的代码,检查是否返回密钥。在第 31 行添加断点。并检查关键变量
  • 它在 var key = Environment.GetEnvironmentVariable("KEY"); 处实际返回 null;

标签: c# visual-studio asp.net-core authentication jwt


【解决方案1】:

您必须像下面的代码一样从 appsettings.json 中获取值。

var issuer = Configuration.GetValue<string>("Jwt:Issuer");

Issuer 不应该是一个部分,您正在尝试将其作为一个部分来阅读。

注意:请检查appsettings.json是否有此配置,如果没有则必须添加。

请同时检查环境,是否正在读取正确的 appsettings..json

【讨论】:

  • 当我这样做时,ValidIssuer = jwtSettings.GetSection("Issuer").Value, 发生错误,
  • 所以基本上你无法读取配置。你试过我的建议了吗?发行人不是一个部分,它是关键值,您正在尝试阅读为部分
  • 我确实做了这个改变 var jwtSettings = Configuration.GetValue("jwt:Issuer");
  • 你能显示你的 appsettings.json 吗?你是如何运行应用程序的?
  • 但是 ValidIssuer = jwtSettings.GetSection("Issuer").Value,错误的字符串不包含 GetSection 的定义
【解决方案2】:

请尝试使用以下代码获取您的设置:

var jwt = _configuration.GetSection("Jwt");
var lifeTime = jwt.GetSection("lifetime")?.Value;
var issuer = jwt.GetSection("Issuer")?.Value;

并在使用前检查issuerlifetime 变量是否为空。

请注意lifetime 值是一个字符串

要将您的密钥添加到 Jwt,请执行以下操作:

"Jwt": {
    "Issuer": "HotelListingAPI",
    "lifetime": 15,
    "Key":"KEY"
},

然后以与 lifetimeissuer 相同的方式获取它

var key = jwt.GetSection("Key")?.Value;

【讨论】:

  • 但是我只是在我的机器上试了一下,返回值正常!我认为问题不在于发行人或生命周期。可能是钥匙
  • 我也是这么认为的...我通过cmd添加的key如下:setx KEY "ffc632ce-0053-4bab-93a4d14aaad" /M
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 2015-06-21
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
相关资源
最近更新 更多