开发者社区 问答 正文

AspNet核心401-添加令牌时没有SecurityTokenValidator

每当我使用Jwt令牌授权发布请求时,如下所示:

_```js client.BaseAddress = new Uri(_settings.Uri); _client.DefaultRequestHeaders.Accept.Clear(); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(type)); _client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");

我收到此错误:

```js
承载未认证。失败消息:没有可用于令牌的SecurityTokenValidator:“ eyJ ...”

仔细查看邮递员中的请求后,我发现问题是在标头上的令牌中添加了“”:

邮差

这就是为什么我这样添加令牌的原因:

_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.Replace("\"", "")}");

但是对我来说似乎“肮脏”。有没有更好的办法?

展开
收起
几许相思几点泪 2019-12-03 16:08:09 581 分享 版权
阿里云 AI 助理回答

在C#中使用Jwt令牌进行HTTP请求时,确保令牌格式正确非常重要。你遇到的问题是因为JWT令牌被不必要的双引号包围了。你的解决方法是手动移除这些双引号,这确实是一种临时解决方案,但如你所说,这不是最优雅的方式。

一个更干净且推荐的做法是在存储或传递JWT令牌时就避免引入额外的双引号。检查你的token获取逻辑,确保在整个处理流程中没有意外地给token添加了引号。例如,如果你是从配置文件、数据库或者API响应中读取这个token,请确认该过程没有错误地将原始无引号的token加上了双引号。

如果无法直接从源头解决问题,可以考虑创建一个辅助方法来清理令牌,使得调用处更加简洁和明确:

private string CleanToken(string token)
{
    return token.Replace("\"", "");
}

// 使用时:
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", CleanToken(token));

这样,虽然仍然需要处理字符串,但通过封装到一个方法中,代码的可读性和维护性得到了提升。同时,这个方法也清晰地表达了你的意图——确保令牌格式正确。

另外,直接设置Authorization属性而不是使用Add方法也是推荐的做法,因为Authorization是一个专用的HTTP头,通常只设置一次。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: